【发布时间】:2016-11-29 18:22:47
【问题描述】:
在对数据框中的行求和之前,我需要包含一些操作。这是一个例子:
df1 <- data.frame(
AC1Q = c(0.53, 0.57, 0.60, 0.51),
AC4Q = c(0.15, 0.12, 0.09,0.19),
AC2Q = c(0.09, 0.05, 0.07, 0.05),
AC3Q = c(0.23, 0.26, 0.23, 0.26)
)
df1
# AC1Q AC4Q AC2Q AC3Q
# 1 0.53 0.15 0.09 0.23
# 2 0.57 0.12 0.05 0.26
# 3 0.60 0.09 0.07 0.23
# 4 0.51 0.19 0.05 0.26
我想得到基于(sin(2*pi*(AC1Q-0.25)) + sin(2*pi*(-AC4Q+0.25)) - sin(2*pi*(AC2Q+0.25)) - sin(2*pi*(AC3Q-0.25)))/4)的行总和结果应该是:
# 1 0.20
# 2 0.15
# 3 0.21
# 4 0.10
我正在学习apply并尝试了apply(df1, 1, function(x) (sin(2*pi*(df1$AC1Q-0.25)) + sin(2*pi*(-df1$AC4Q+0.25)) - sin(2*pi*(-df1$AC2Q+0.25)) - sin(2*pi*(df1$AC3Q-0.25)))/4)但结果是错误的。我不确定我做错了什么。我知道我总是可以先对每一列进行计算,将它们组合成一个数据框,然后使用rowsum 但是有没有更有效的方法呢?
【问题讨论】:
-
@joel.wilson 我试过
apply(x, 1, function(x) (sin(2*pi)*(df1$AC1Q-0.25) + sin(2*pi)*(-df1$AC4Q+0.25) - sin(2*pi)*(-df1$AC2Q+0.25) - sin(2*pi)*(df1$AC3Q-0.25))/4),但它返回一条错误消息,指出objectx`未找到` -
您是如何达到预期数字的?你的计算正确吗?
-
您可以直接使用计算,无需循环。简单使用 (sin(2*pi)*(df1$AC1Q-0.25) + sin(2*pi)*(-df1$AC4Q+0.25) - sin(2*pi)*(-df1$AC2Q+0.25) - sin(2*pi)*(df1$AC3Q-0.25))/4)。我的问题是,sin(2*pi) 几乎是 0,那么如何得到你期望的输出呢?