如何使用R中的apply函数创建列与前一列的当前行和行之和的列?
问题描述:
我希望能够将每行中的值与下面的值相加并将结果分配给R中的新列。如何使用R中的apply函数创建列与前一列的当前行和行之和的列?
下面的代码(几乎)实现了我想要的for循环(除了我必须手动做最后一行 - 这不是一个真正的问题)。我想做类似的事情,但使用apply函数,因为for循环在我的大数据集上非常慢 - 但我无法弄清楚apply语法。
data<-data.frame(runif(10))
data$x<-
for (i in 1:nrow(data)) {
data[i,2 ] <- data[i,1]+data[i+1,1]
}
答
我们可以通过从列的任一端移除一个值并使用NA进行简化来获得当前值与前一个值的总和。
data$x <- c(data[,1][-1] + data[,1][-nrow(data)], NA)
答
使用rollSum(包
使用rollSum(包RcppRoll
)
您可以使用该功能roll_sum(x, nb)
,让你做一个向量的(连续)滚动总和。
,如果我们把你的例子:
data<-data.frame(x=runif(10000000))
data$sum<-roll_sum(data$x, 1)
也有rollapply(x, nb, fct)
从包装zoo
但较少高性能。
你可以看到一个微型基准here
转换数据
也许只是你改造由他创建副本少的第一个值向量和0的最后一个值将正常工作。
data<-data.frame(x=runif(10))
data$copy<-c(data$x[-1],0)
data$sum<-rowSums(data)
答
您可以制作一个由1开始的向量(它从第二个组件开始),并在其末尾添加一个NA。然后做总和。
data<-data.frame(runif(10))
col1 <- data$runif.10.
col1.off <- col1[2:length(col1)]
col1.off <- c(col1.off, NA)
data$x <- col1 + col1.off
最后一行和什么和?零? – Tav
提问前做一些研究。问题已经存在[这里](http://*.com/questions/19200841/consecutive-rolling-sums-in-a-vector-in-r?noredirect=1&lq=1)。当人们在验证一个之前需要时间回答您的问题时,请阅读所有答案。 –