如何在dplyr中通过变量存储的列名与另一列相乘后排序数据框?
解决dplyr中用变量存储列名时按两列乘积排序的问题
你遇到的问题是因为直接使用!!my_var时,只是把字符串"a"代入表达式,相当于执行"a" * b,字符串和数值相乘自然会报“非数值参数”的错误。这里提供两种可行的解决方法:
方法1:使用.data代词(dplyr推荐方式)
.data是dplyr提供的代词,用来引用数据框中的列,通过[[ ]]可以直接用字符型变量指定列名:
library(dplyr) my_var <- 'a' data.frame(a=1:10, b=seq(20,1,-2)) %>% arrange(.data[[my_var]] * b)
方法2:将字符列名转为符号再解引用
先用sym()把字符型变量转换成符号类型,再用!!解引用为列:
library(dplyr) my_var <- 'a' data.frame(a=1:10, b=seq(20,1,-2)) %>% arrange(!!sym(my_var) * b)
两种方法都能正确实现按a*b的结果对数据框排序的需求。
内容的提问来源于stack exchange,提问作者drmariod
相关产品推荐
相关产品推荐

