【发布时间】:2019-10-16 10:27:45
【问题描述】:
我的问题是this question 的扩展。我想弄清楚如何使用具有多列的 dplyr 来划分行组,而不是单个变量。
我有这个数据框:
x <- data.frame(
name = rep(letters[1:4], each = 2),
condition = rep(c("A", "B"), times = 4),
value1 = c(2,10,4,20,8,40,20,100),
value2 = c(2,10,4,20,8,40,20,100)
)
# name condition value1 value2
# 1 a A 2 2
# 2 a B 10 10
# 3 b A 4 4
# 4 b B 20 20
# 5 c A 8 8
# 6 c B 40 40
# 7 d A 20 20
# 8 d B 100 100
我想按名称分组并将condition == "B" 行的值与condition == "A" 行的值相除,得到这个:
data.frame(
name = letters[1:4],
value1 = c(5,5,5,5),
value2 = c(5,5,5,5)
)
# name value1 value2
# 1 a 5 5
# 2 b 5 5
# 3 c 5 5
# 4 d 5 5
对于带有单个变量的原始问题,Steven Beaupré 给出了最受好评的答案:
x %>%
group_by(name) %>%
summarise(value = value[condition == "B"] / value[condition == "A"])
但这个答案是针对单值情况的,我不知道如何扩展到“summarise_at”和“summarise_all”。我尝试使用“点”,但无法找出正确的语法。
【问题讨论】:
-
summarise(value1 = value1[condition == "B"] / value1[condition == "A"], value2 = value2[condition == "B"] / value2[condition == "A"])