加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

在dplyr中使用’window’函数

发布时间:2020-12-14 02:53:10 所属栏目:Windows 来源:网络整理
导读:我需要按顺序处理数据帧的行,但需要回顾某些行.这是一个近似的例子: library(dplyr)d - data_frame(trial = rep(c("A","a","b","B","x","y"),2))d - d %% mutate(cond = rep('',n()),num = as.integer(rep(0,n())))for (i in 1:nrow(d)){ if(d$trial[i] ==
我需要按顺序处理数据帧的行,但需要回顾某些行.这是一个近似的例子:

library(dplyr)
d <- data_frame(trial = rep(c("A","a","b","B","x","y"),2))
d <- d %>%
  mutate(cond = rep('',n()),num = as.integer(rep(0,n())))

for (i in 1:nrow(d)){
  if(d$trial[i] == "A"){
  d$num[i] <- 0
  d$cond[i] <- "A"
  }
else if(d$trial[i] == "B"){
  d$num[i] <- 0
  d$cond[i] <- "B"
  }
else{
  d$num[i] <- d$num[i-1] +1
  d$cond[i] <- d$cond[i-1]
  }
}

结果数据框看起来像

> d
Source: local data frame [12 x 3]

    trial cond num
 1      A    A   0
 2      a    A   1
 3      b    A   2
 4      B    B   0
 5      x    B   1
 6      y    B   2
 7      A    A   0
 8      a    A   1
 9      b    A   2
10      B    B   0
11      x    B   1
12      y    B   2

使用dplyr执行此操作的正确方法是什么?

解决方法

dlpyr-only解决方案:

d %>% 
  group_by(i=cumsum(trial %in% c('A','B'))) %>% 
  mutate(cond=trial[1],num=seq(n())-1) %>% 
  ungroup() %>% 
  select(-i)

#    trial cond num
# 1      A    A   0
# 2      a    A   1
# 3      b    A   2
# 4      B    B   0
# 5      x    B   1
# 6      y    B   2
# 7      A    A   0
# 8      a    A   1
# 9      b    A   2
# 10     B    B   0
# 11     x    B   1
# 12     y    B   2

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读