将dplyr函数应用于除一列外的所有列

4

给定一个数据框,除了最后一列外,所有列都是数字值,如何计算行平均值?

在此示例中,我使用所有列,包括我想要省略的 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

2
我可能会使用 apply 函数来实现(例如,apply(df[, 1:10], 1, mean))。 - Benjamin
9
生活中并不是所有事情都涉及到 dplyr,只需执行 df$Mean <- rowMeans(df[-ncol(df)]) 就可以了。如果您坚持使用 dplyr,我认为惯用的方法应该是类似于 df %>% select(-ncol(df)) %>% mutate(Mean = rowMeans(.)) - David Arenburg
1
@DavidArenburg 我真的认为这两个都是可行的答案。你应该把你的评论转换为一个答案。 - Brandon Bertelsen
1
@DavidArenburg,您的dplyr建议会从最终结果中删除name,而不是匹配OP所需的输出。 - Steven Beaupré
1
@StevenBeaupré 是的,我后来看到了,但无法编辑。你的方法可能是惯用的方式,但我觉得仅仅为了计算数据集上的rowMeans而打这么多字太麻烦了。 - David Arenburg
@DavidArenburg 同意。我也会选择像你建议的那样使用基本的R语言。你应该把你的评论转换成一个答案。 - Steven Beaupré
2个回答

14

您可以尝试:

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

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接