【发布时间】:2018-04-18 20:31:57
【问题描述】:
我制作了这个虚拟数据集:
df = data.frame(Order = "Order1",
Condition = c("P", "A", "B", "C", "D", "E", "F"),
Value = c(500, -10, -5,0,0, -10,0))
假设某些条件属于不同的组。
list = list( Group1 = c("A", "B"),
Group2 = c("C", "D"),
Group3 = c("E","F"))
我需要按条件对它们进行聚合,得到每个组的总和和计数。
预期输出:
Order P Group1 Group2 Group3 Group1n Group2n Group3n
Order1 500 -15 0 -10 2 0 1
我在想这样的事情:
df %>% group_by(Order) %>% summarise(Group1 = sum(Value[Condition == "A" | Condition == "B" ]),
Group2 = sum(Value[Condition == "C" | Condition == "D" ] ),
Group3 = sum(Value[Condition == "E" | Condition == "F"]),
Group1n = length(Value[Condition == "A" | Condition == "B" ]),
Group2n = length(Value[Condition == "C" | Condition == "D" ]),
Group3n = length(Value[Condition == "E" | Condition == "F" ]))
我的输出:
# A tibble: 1 x 7
Order Group1 Group2 Group3 Group1n Group2n Group3n
<fct> <dbl> <dbl> <dbl> <dbl> <int> <int>
Order1 -15.0 0 -10.0 2 2 2
但我无法正确计数。还有一种有效的方法可以让我传递列表而不是明确写 Condition ==A 或 B ...等。
谢谢
【问题讨论】:
-
调用函数没有问题。这与这里的分组无关。
-
我的错误 - 对不起。
-
我不明白为什么你得到的输出是错误的。在您的示例数据框中,第 4 行是
C,第 5 行是D。因此Group2 = c("C", "D")中的行数确实是 2。为什么你期望 0?您只想计算Value不为0 的行吗? -
是的,我猜它没有正确解释,但它显示在预期的输出中。欢呼