在dplyr管道操作中用变量替代列名报错,如何解决?
用变量替代dplyr管道中的列名方法
我有一张名为Dec20的数据表,里面包含FEEL_a_W77和FEEL_b_W77两列。为了避免重复编写两段几乎一样的dplyr代码:
Dec20 %>% select(FEEL_a_W77) %>% group_by(FEEL_a_W77) %>% summarize(n=n())
Dec20 %>% select(FEEL_b_W77) %>% group_by(FEEL_b_W77) %>% summarize(n=n())
我尝试用变量赋值简化:
colname <- FEEL_a_W77 //后续将改为FEEL_b_W77
Dec20 %>% select(colname) %>% group_by(colname) %>% summarize(n=n())
但运行时报错:Error: object 'FEEL_a_W77' not found。请问怎么实现用变量替代列名的需求?
解决方法
1. 字符串变量结合整洁评估语法({{}})
把列名存成字符串,然后用{{}}在dplyr函数中引用变量:
colname <- "FEEL_a_W77" Dec20 %>% select({{ colname }}) %>% group_by({{ colname }}) %>% summarize(n = n())
后续切换列名时,只需要修改colname的字符串值即可。
2. 使用.data代词
dplyr提供的.data代词可以直接通过字符串引用列:
colname <- "FEEL_a_W77" Dec20 %>% select(.data[[colname]]) %>% group_by(.data[[colname]]) %>% summarize(n = n())
3. 封装成函数批量处理
如果需要频繁处理多个列,写个小函数会更高效:
count_column <- function(data, col_name) { data %>% select({{ col_name }}) %>% group_by({{ col_name }}) %>% summarize(n = n()) } # 调用示例 count_column(Dec20, FEEL_a_W77) count_column(Dec20, FEEL_b_W77)
内容的提问来源于stack exchange,提问作者thanks_in_advance
相关产品推荐
相关产品推荐

