应用Dataframe函数 - 我可以参考上一行吗?

时间:2017-05-19 00:47:53

标签: r dataframe apply

我正在处理一个数据帧,其中一列是布尔矢量。布尔向量表示其行是否开始一个新的'组' (数据按此列排序)。这是一个微不足道的例子:

    d <- data.frame(element=c(1:10),newGroup=c("TRUE","FALSE","FALSE","FALSE","TRUE","FALSE","TRUE","FALSE","FALSE","TRUE"))
> d
   element newGroup
1        1     TRUE
2        2    FALSE
3        3    FALSE
4        4    FALSE
5        5     TRUE
6        6    FALSE
7        7     TRUE
8        8    FALSE
9        9    FALSE
10      10     TRUE

我现在想要创建不同组的索引。要做到这一点,我只需要执行以下操作:

group <- vector("numeric",nrow(d))

然后,对于2:nrow(d):

中的每一行r
if(d[r, c("newGroup")==TRUE)
{
   group[r] <- group[r-1]
}else{
   group[r] <- group[r-1]+1
}

我试图使用apply函数完成此操作,如下所示,但我在将函数应用于数据框的行时遇到问题,因为该函数作用于我的行中的特定元素并依赖以前行的信息。申请正确的方式去这里?当我尝试实现上述内容时,我收到错误"Error in [.data.frame (r, "indx") : undefined columns selected Called from: [.data.frame(r, "indx") debug: length(cols) == 1"

这是我的代码:

d$indx <- 1:nrow(d)
d$RunID <- as.numeric("")
d$RunID[1] <- 1

newRun <- function(r)
{
  r <- as.data.frame(r)
  if(d$newGroup[r$indx]==TRUE)
  {
    group <- d$RunID[r$indx-1]
  }else{
    group <- d$RunID[r$indx-1] + 1
  }
  return(group)
}

Runs <- apply(d[2:nrow(d),],1,newRun)
d$RunID[2:nrow(d)] <- Runs

0 个答案:

没有答案