【问题标题】:Apply dplyr function to all but one column将 dplyr 函数应用于除一列之外的所有列
【发布时间】:2015-07-30 12:58:42
【问题描述】:

给定一个数据框,除最后一列外,所有列中都包含数值,我如何计算整个行的平均值?

在此示例中,我使用了所有列,包括我想省略的 name 列。

df <- as.data.frame(matrix(1:40, ncol=10)) %>%
    mutate(name=LETTERS[1:4]) %>%
    mutate(mean=rowMeans(.))

所需的数据帧输出:

  V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 mean name
1  1  5  9 13 17 21 25 29 33  37   19    A
2  2  6 10 14 18 22 26 30 34  38   20    B
3  3  7 11 15 19 23 27 31 35  39   21    C
4  4  8 12 16 20 24 28 32 36  40   22    D

【问题讨论】:

  • 我可能会使用apply(即apply(df[, 1:10], 1, mean))
  • 生活中并不是所有的事情都与dplyr 相关,只要做df$Mean &lt;- rowMeans(df[-ncol(df)]) 就可以了。虽然如果你坚持,我认为惯用的方式类似于df %&gt;% select(-ncol(df)) %&gt;% mutate(Mean = rowMeans(.))
  • @DavidArenburg 我真的认为这两个都是可行的答案。您应该将您的评论转换为答案。
  • @DavidArenburg 您的dplyrsuggestion 将从最终结果中删除name,并且与OP 所需的输出不匹配。
  • @StevenBeaupré 是的,我后来看到了,但无法编辑。您的方法可能是惯用的方法,除了我发现在数据集上计算 rowMeans 的方式太多

标签: r dplyr


【解决方案1】:

你可以试试:

df %>% 
  mutate(mean = select(., -matches("name")) %>% rowMeans(.))

【讨论】:

    【解决方案2】:

    在您的设置中,您可以使用

    df <- as.data.frame(matrix(1:40, ncol=10)) %>%
      mutate(name=LETTERS[1:4]) %>%
      mutate(mean=rowMeans(.[,1:10]))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-08
      • 2016-12-02
      • 2014-05-03
      • 2015-02-23
      • 2012-10-19
      • 1970-01-01
      • 2021-01-16
      • 1970-01-01
      相关资源
      最近更新 更多