【问题标题】:Summing row values using mutate_at使用 mutate_at 对行值求和
【发布时间】:2020-04-12 20:22:13
【问题描述】:

我正在尝试使用 mutate_atsum 函数按特定列对行值求和。数据集如下:

Country/Region   1/22/20   1/23/20   1/24/20  1/25/20  1/26/20  1/27/20 
Chili            0         0         0        3        1        2
Chili            1         0         1        4        2        1
China            23        26        123      12       56       70
China            45        25        56       23       16       18

我正在使用以下代码,但不是对所有列值求和,而是得到零。

tb <- confirmed_raw %>% group_by(`Country/Region`) %>%
      filter(`Country/Region` != "Cruise Ship") %>%
      select(-`Province/State`, -Lat, -Long) %>%
      mutate_at(vars(-group_cols()), ~sum) 

我想要的输出是:

Country/Region   1/22/20   1/23/20   1/24/20  1/25/20  1/26/20  1/27/20 
Chili            2         0         1        7        3        3
China            68        51        179      35       72       88

但不是上面的,而是所有日期列都为 0。我该如何解决这个问题?

【问题讨论】:

    标签: r aggregate dplyr summary


    【解决方案1】:

    你可以试试summarise_all 代替mutate_at(vars(-group_cols()), ~sum) 吗?

    tb %>% group_by(`Country.Region`) %>% summarise_all(funs(sum))
    

    PS:我猜你这里的拼写错误很少,例如tb[1,1] 应该返回1,而不是2。此外,示例代码与数据不完全对应(其中没有 Cruise ShipProvince/State。尽管如此,忽略这些,我发现这可以生成预期的输出。

    【讨论】:

    • 非常感谢。 summarise_all 工作并给出了所需的输出。是的 tb[1,1] 是一个错字,为了简单起见,我只给出了我的数据集的一部分。实际数据集确实包含“游轮”和“省/州”。实际数据集是 COVID19 的 JHU 数据集。
    • 很高兴能帮上忙,我也是这样学习的。请您接受并投票赞成答案吗?这样,我们就知道问题解决了,我们也得到了分数:D
    【解决方案2】:

    要完成,另一种选择:

    tb %>% group_by(`Country/Region`) %>% mutate_all(sum) %>% distinct(`Country/Region`,.keep_all = TRUE)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-26
      • 1970-01-01
      • 2012-03-29
      • 2016-05-14
      • 1970-01-01
      相关资源
      最近更新 更多