使用动态列名变量在dplyr中统计字符数失败,如何解决?
解决动态列名在mutate中统计字符数的问题
你遇到的问题是因为{{varname}}在这里直接解析成了字符串"a",而非数据框中的列a,所以nchar计算的是字符串本身的长度,而不是列中每个元素的字符数。下面是几种可行的解决方法:
方法一:使用
.data代词(推荐)
tidyverse提供的.data代词可以直接通过字符向量引用列,代码简洁直观:testdf <- data.frame(a=c("Hello", "Hi", "Howy")) varname <- "a" testdf %>% mutate(b = nchar(.data[[varname]]))方法二:将字符转成符号后解引用
用ensym()把字符串变量转换成符号,再通过!!(解引用操作符)让它指向目标列:testdf %>% mutate(b = nchar(!!ensym(varname)))方法三:使用
across函数
如果需要批量处理多列,across结合all_of()是更灵活的选择,单列场景也适用:testdf %>% mutate(b = nchar(across(all_of(varname))))
运行以上任意代码,都会得到正确的结果:新列b会分别对应Hello(5)、Hi(2)、Howy(4)的字符数。
内容的提问来源于stack exchange,提问作者robertspierre
相关产品推荐
相关产品推荐

