【发布时间】:2026-02-06 16:40:01
【问题描述】:
我正在尝试对每一行数据框进行求和。假设我想取 100n^2 的总和,从 n=1 到 n=4。
> df <- data.frame(n = seq(1:4),a = rep(100))
> df
n a
1 1 100
2 2 100
3 3 100
4 4 100
更简单的例子:
让fun1 成为我们的求和函数示例。我可以拉出 100,因为我可以稍后将它相乘。
fun <- function(x) {
i <- seq(1,x,1)
sum(i^2) }
然后我想将此函数应用于数据帧的每一行,其中df$n 提供总和的上限。
期望的结果如下,df$b:
> df
n a b
1 1 100 1
2 2 100 5
3 3 100 14
4 4 100 30
为了达到这些结果,我尝试了 apply 函数
apply(df$n,1,phi)
还有用df转换成矩阵
mat <- as.matrix(df)
apply(mat[1,],1,phi)
两者都返回错误:
Error in seq.default(1, x, 1) : 'to' must be of length 1
我理解这个错误,因为我理解为什么 seq 需要长度为 1 的“to”值。我不知道如何继续。
在将数据帧作为矩阵读取时,我也尝试过同样的方法。
也许不太简单的例子:
在我的情况下,我只需将上面的结果 df$b 乘以 100(或 df$a)即可得到每一行的最终答案。但是,在其他情况下,第二个值可能更加根深蒂固,例如 a^i。我将如何调用两个变量,a 和 n?
基本问题:
我的基本目标是将总和应用于数据框(或矩阵)的每一行。上述问题源于我尝试使用 seq() 这样做,正如我在本网站的答案中看到的那样。我很乐意接受一个可以用不同的求和方式排除上述问题的答案。
【问题讨论】:
-
通常你可以向量化,在这种情况下
cumsum(df$n^2)