如何使用R中的apply函数创建具有前一列当前行和行的总和的列?

时间:2016-07-12 09:10:56

标签: r dataframe apply

我希望能够将每行中的值与下面的值相加,并将结果分配给R中的新列。

以下代码(几乎)使用for循环实现了我想要的东西(除了我必须手动执行最后一行 - 这不是真正的问题)。我想做类似的事情,但使用apply函数,因为for循环在我的大数据集上非常慢 - 但是我无法弄清楚apply语法。

System.arrayCopy

3 个答案:

答案 0 :(得分:1)

使用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 :(得分:0)

我们可以通过从列的任一端删除一个值并使用NA连接来获取当前值与前一个值的总和。

data$x <- c(data[,1][-1] + data[,1][-nrow(data)], NA)

答案 2 :(得分:0)

你可以使一个向量偏离的向量(它从第二个组件开始)并在其末尾添加一个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