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