R 为数据帧应用函数-我可以引用上一行吗?

R 为数据帧应用函数-我可以引用上一行吗?,r,dataframe,apply,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

我正在处理一个数据帧,其中一列是布尔向量。布尔向量指示其行是否开始一个新的“组”(数据按此列排序)。下面是一个简单的例子:

    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
我试图用
apply
函数来实现这一点,如下所示,但是我在将函数应用到数据框的行时遇到了问题,因为该函数作用于行中的特定元素,并且依赖于前几行的信息。在这里使用正确的方法吗?当我尝试实现类似上面的内容时,我在[data.frame
(r,“indx”)中得到了错误
:未定义的列从以下位置调用:[.data.frame(r,“indx”)调试:长度(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

d$indx您期望的输出是什么?d$group=cumsum(d$newGroup==“TRUE”)
实现了您想要的吗?
“TRUE”
TRUE
在R中也不一样。@Marius,是的,这实现了我想要的。谢谢,我不知道这个函数。如果它们确实是
TRUE
而不是
“TRUE”
,只要
cumsum(d$newGroup)
就行了。
if(d[r, c("newGroup")==TRUE)
{
   group[r] <- group[r-1]
}else{
   group[r] <- group[r-1]+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