如何通过变量按分组传递列名

时间:2019-04-17 07:05:28

标签: r dataframe dplyr

要提取每组数据帧的一列的最大值。

我在变量中有列名,我想按条件按组传递,但是失败。

我有以下数据框:

df <- read.table(header = TRUE, text = 'Gene   Value
             A      12
             A      10
             B      3
             B      5
             B      6
             C      1
             D      3
             D      4')

以下变量中的列值:

columnselected <- c("Value")
groupbycol <- c("Gene")

我的代码是:

df %>% group_by(groupbycol) %>% top_n(1, columnselected)

此代码给出了错误。

  Gene   Value
   A        12
   B         6
   C         1
   D         4

2 个答案:

答案 0 :(得分:0)

您需要使用sym将列名转换为符号,然后使用!!

对其进行求值。
library(dplyr)

df %>% group_by(!!sym(groupbycol)) %>% top_n(1, !!sym(columnselected))

#  Gene  Value
#  <fct> <int>
#1 A        12
#2 B         6
#3 C         1
#4 D         4

答案 1 :(得分:0)

我们可以使用group_by_at,而无需使用其他软件包

library(dplyr)
df %>%
   group_by_at(groupbycol) %>% 
   top_n(1, !! as.name(columnselected))
# A tibble: 4 x 2
# Groups:   Gene [4]
#  Gene  Value
#  <fct> <int>
#1 A        12
#2 B         6
#3 C         1
#4 D         4

注意:这篇文章会有很多骗子:=)