如何使用 R 中的应用函数创建包含前一列的当前行和下一行的总和的列?
How to create column with sum of previous column's current row and row below using an apply function in R?
我希望能够将每行中的值与下面的值相加,并将结果分配给 R 中的新列。
下面的代码(几乎)使用 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(包RcppRoll
)
您可以使用函数 roll_sum(x, nb)
,它允许您对向量进行(连续)滚动求和。
如果我们以你为例:
data<-data.frame(x=runif(10000000))
data$sum<-roll_sum(data$x, 1)
包 zoo
中也有 rollapply(x, nb, fct)
,但性能较差。
你可以看到一个微基准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
我希望能够将每行中的值与下面的值相加,并将结果分配给 R 中的新列。
下面的代码(几乎)使用 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(包RcppRoll
)
您可以使用函数 roll_sum(x, nb)
,它允许您对向量进行(连续)滚动求和。
如果我们以你为例:
data<-data.frame(x=runif(10000000))
data$sum<-roll_sum(data$x, 1)
包 zoo
中也有 rollapply(x, nb, fct)
,但性能较差。
你可以看到一个微基准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