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