【问题标题】:Using dplyr rowwise with range of columns without enumerating column names在不枚举列名的情况下逐行使用 dplyr 与列范围
【发布时间】:2018-01-26 15:26:05
【问题描述】:

是否可以在dplyr 中结合rowwise() 引用“所有列”或一系列列,而不必枚举所有单独的列名?

例如,在下面,我宁愿不指定前7个列名中的每一个,而是说1:7之类的。似乎无法让它工作。一定是少了一些简单的东西。

mtcars %>%
  rowwise() %>%
  mutate(sillyMetric = mean(c(mpg, cyl, disp, hp, drat, wt, qsec))) %>%
  .$sillyMetric

请不要告诉我在这种情况下我不需要rowwise()。我显然有一个不同的问题,我试图解决它需要它。我想知道是否有办法不必用rowwise 枚举所有列名。 我不想要sillyMetric 以上更有效地计算此值的任何其他解决方案。

【问题讨论】:

  • rowMeans(mtcars[,1:7]) 呢?
  • :) 阅读我的最后评论。
  • 如果您尝试解决不同的问题,那么您应该更新您的问题,以包含一个示例来说明您要解决的问题类型。
  • 这是一个最小的、可重现的例子。不知道你为什么坚持我进一步详细说明我需要什么。我只需要不必用rowwise 枚举列名。
  • stackoverflow.com/questions/28751023/…。无论如何,所有答案基本上都是在mutate 中破解rowMeans(在你的情况下只是mean)。通常通过使用dplyr 而不是基础所获得的简单性似乎超过了解决方案最终会变得多么糟糕。

标签: r dplyr


【解决方案1】:

没有办法在前面按行执行此操作。您可能需要退后一步,重新考虑如何处理其余代码。能够根据行 ID 进行计算可能会产生丰硕的成果。像这样的:

mtcars %>%
  mutate(id = 1:n()) %>%
  gather(metric, val, 1:7) %>% 
  group_by(id) %>%
  summarise(SillyMetric = mean(val))

在最坏的情况下,您可以单独执行此操作,然后使用左连接将其加入。

【讨论】:

  • 这其实是一个非常好的总体思路。它甚至可能会变得更快。让我看看它是如何工作的。
  • 告诉我们结果如何!
猜你喜欢
  • 2015-12-24
  • 2019-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-06
  • 1970-01-01
  • 2015-05-02
  • 1970-01-01
相关资源
最近更新 更多