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

时间:2019-05-30 18:31:19

标签: r dplyr

我的问题是this question的扩展名。我想弄清楚如何使用具有多列的dplyr而不是单个变量来划分行组。

我有这个数据框:

  jQuery(function () {
    var $els = $('div[id^=quote]'),
        i = 0,
        len = $els.length;

        $els.slice(1).hide();
        setInterval(function () {
            $els.eq(i).fadeOut(function () {
                i = (i + 1) % len
                $els.eq(i).fadeIn();
            })
        }, 4000) 
    })

我想按名称分组,并将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"

史蒂文·博普雷(StevenBeaupré)在最原始的问题中只有一个变量是最令人讨厌的答案:

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

但是该答案是针对单值情况的,我不知道如何扩展到“ summarise_at”和“ summarise_all”。我尝试使用“点”,但无法找出正确的语法。

2 个答案:

答案 0 :(得分:1)

我想出了一种方法。

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

答案 1 :(得分:0)

我不确定是否可以自动将此功能扩展到每个变量。我认为您需要为每种情况指定摘要功能。

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