dplyr中slice_max函数字符串变量插值不生效问题排查
问题原因
你使用的{{ }}和!!直接作用于字符串变量var时,没有将字符串内容解析为数据框的列,而是直接把"B"这个字符串常量作为排序依据。所有行的字符串常量取值完全相同,slice_max默认遇到并列值只返回第一行,所以最终只输出1条结果。
正确解决方法
有两种常用的符合tidy evaluation规范的写法:
方法1:使用.data代词(推荐)
.data是tidyverse提供的指向当前管道数据框的代词,用[[即可传入字符串变量提取对应列:
df %>% slice_max(.data[[var]], n = 5)
方法2:将字符串转为符号后解引用
先把字符串列名用sym()转为R的语言符号,再用!!解引用即可对应到数据框的列:
df %>% slice_max(!!sym(var), n = 5)
两种写法的输出都和你直接传入列名B的结果完全一致。
内容的提问来源于stack exchange,提问作者csgroen
相关产品推荐
相关产品推荐

