如何使用具有多个列的dplyr在多组行之间进行划分?

如何使用具有多个列的dplyr在多组行之间进行划分?,r,dplyr,R,Dplyr,我的问题是这个问题的延伸。我想弄清楚如何使用具有多个列的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) ) # nam

我的问题是这个问题的延伸。我想弄清楚如何使用具有多个列的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
史蒂文·博普雷(Steven Beaupré)对原始问题的答案是最多的,只有一个变量:

x %>% 
group_by(name) %>%
summarise(value = value[condition == "B"] / value[condition == "A"])

但这个答案是针对单值情况的,我不知道如何扩展到“汇总在”和“汇总所有”。我试着用“点”,但不能找出正确的语法

我不确定是否有办法将此函数自动扩展到每个变量。我认为您需要为每个值案例指定summary函数

x %>%
  group_by(name) %>%
  summarise(value1 = value1[condition == "B"] / value1[condition == "A"],
            value2 = value2[condition == "B"] / value2[condition == "A"])

#  name  value1 value2
#   <fct>  <dbl>  <dbl>
# 1 a          5      5
# 2 b          5      5
# 3 c          5      5
# 4 d          5      5
x%>%
分组单位(名称)%>%
总结(value1=value1[条件==“B”]/value1[条件==“A”],
value2=value2[条件==“B”]/value2[条件==“A”])
#名称值1值2
#       
#1 a 5 5
#2 b 5 5
#3 c 5
#4 d 5 5

我想出了一个办法

x %>% gather(variable, value, -(name:condition)) %>%
group_by(variable,name) %>%
summarise(value = value[condition == "B"] / value[condition == "A"]) %>%
spread(variable,value)

#  name  value1 value2
#   <fct>  <dbl>  <dbl>
# 1 a          5      5
# 2 b          5      5
# 3 c          5      5
# 4 d          5      5
x%>%gather(变量,值,-(名称:条件))%>%
分组依据(变量、名称)%>%
总结(值=值[条件==“B”]/值[条件==“A”])%>%
排列(变量、值)
#名称值1值2
#       
#1 a 5 5
#2 b 5 5
#3 c 5
#4 d 5 5
总结(value1=value1[条件==“B”]/value1[条件==“A”],value2=value2[条件==“B”]/value2[条件==“A”])
x %>% gather(variable, value, -(name:condition)) %>%
group_by(variable,name) %>%
summarise(value = value[condition == "B"] / value[condition == "A"]) %>%
spread(variable,value)

#  name  value1 value2
#   <fct>  <dbl>  <dbl>
# 1 a          5      5
# 2 b          5      5
# 3 c          5      5
# 4 d          5      5