EXCEL R 中的 SUMIFS 使用 ddply
EXCEL SUMIFS IN R using ddply
我正在尝试为我在 EXCEL(分别为 A、B、C 列)中实现的以下 table 实现 SUMIFS 逻辑:
ID x y
123 3 50
123 2 -10
123 4 -20
124 3 50
124 2 -10
124 4 -20
- 使用公式创建一个新向量 z:
=IF(C2>0;(SUMIFS($C:$C;$A:$A;A2;$B:$B;">="&B2));C2)
将公式向下复制以填充向量 z,它起作用了。
对于每一行,如果 "y" > 0 如果 ID 相同且 "x" 的值大于 0,则公式将添加 "y" 的值当前行中 "x" 的值。
在 R 中,我尝试编写一个 ddply 函数,但我在 for 循环中挣扎。所以这里是我所在的位置:
ddply(test,.(ID,x), mutate, z = function(y))
我也试过"summarise",但条件问题依然存在。
我将不胜感激定义函数 (y) 的任何帮助,以便我可以获得等效的 excel 结果。非常感谢。
我将你的公式粘贴到 sheet 中并修改如下...
=IF(C2>0,(SUMIFS($C:$C,$A:$A,A2,$B:$B,">="&B2)),C2)
我把分号改成了逗号。
我得到的结果...
这有点蛮力,可能不是最好的方法,但它复制了 Excel 输出:
# sample data:
df <- read.table(text = 'ID x y
123 3 50
123 2 -10
123 4 -20
124 3 50
124 2 -10
124 4 -20', header = TRUE)
# create a new column called 'sum_y' using the defined rules:
for(i in 1:nrow(df)){
if (df$y[i] > 0) df$sum_y[i] = sum(df$y[df$x >= df$x[i] & df$ID == df$ID[i]])
else df$sum_y[i] = df$y[i]
}
# view the output:
df
ID x y sum_y
1 123 3 50 30
2 123 2 -10 -10
3 123 4 -20 -20
4 124 3 50 30
5 124 2 -10 -10
6 124 4 -20 -20
我正在尝试为我在 EXCEL(分别为 A、B、C 列)中实现的以下 table 实现 SUMIFS 逻辑:
ID x y
123 3 50
123 2 -10
123 4 -20
124 3 50
124 2 -10
124 4 -20
- 使用公式创建一个新向量 z:
=IF(C2>0;(SUMIFS($C:$C;$A:$A;A2;$B:$B;">="&B2));C2)
将公式向下复制以填充向量 z,它起作用了。
对于每一行,如果 "y" > 0 如果 ID 相同且 "x" 的值大于 0,则公式将添加 "y" 的值当前行中 "x" 的值。
在 R 中,我尝试编写一个 ddply 函数,但我在 for 循环中挣扎。所以这里是我所在的位置:
ddply(test,.(ID,x), mutate, z = function(y))
我也试过"summarise",但条件问题依然存在。 我将不胜感激定义函数 (y) 的任何帮助,以便我可以获得等效的 excel 结果。非常感谢。
我将你的公式粘贴到 sheet 中并修改如下...
=IF(C2>0,(SUMIFS($C:$C,$A:$A,A2,$B:$B,">="&B2)),C2)
我把分号改成了逗号。
我得到的结果...
这有点蛮力,可能不是最好的方法,但它复制了 Excel 输出:
# sample data:
df <- read.table(text = 'ID x y
123 3 50
123 2 -10
123 4 -20
124 3 50
124 2 -10
124 4 -20', header = TRUE)
# create a new column called 'sum_y' using the defined rules:
for(i in 1:nrow(df)){
if (df$y[i] > 0) df$sum_y[i] = sum(df$y[df$x >= df$x[i] & df$ID == df$ID[i]])
else df$sum_y[i] = df$y[i]
}
# view the output:
df
ID x y sum_y
1 123 3 50 30
2 123 2 -10 -10
3 123 4 -20 -20
4 124 3 50 30
5 124 2 -10 -10
6 124 4 -20 -20