如何在R中使用管道(pipe)查看数据框(dataframe)的因子水平(levels)
解决管道语法查看因子水平的报错问题
这个管道语法的坑我之前也踩过,先给你拆解下报错原因,再给你几个好用的解决办法:
首先,%>%管道的默认逻辑是把左边的对象作为第一个参数传给右边的函数/表达式。你写的data %>% attributes(sex)$levels,R实际执行的时候会把data塞给$操作符,变成了$.(attributes(sex), levels)——这就给只接受2个参数的$传了3个参数,自然就触发错误了。
下面是几种正确的管道写法,适配不同的使用习惯:
方法1:dplyr风格的简洁写法
用pull()提取目标列,再直接调用levels()(这个函数本身就能直接获取因子水平,不用绕去attributes()):
data %>% pull(sex) %>% levels() #> [1] "f" "m"
方法2:显式指定数据对象(加大括号)
如果你一定要保留attributes()的写法,可以用大括号包裹表达式,这样管道不会自动传递左边对象到第一个参数位,你手动用.指代data即可:
data %>% {attributes(.$sex)$levels} #> [1] "f" "m"
方法3:用[[提取列后操作
直接在管道里用[[提取sex列,再获取水平:
data %>% .[["sex"]] %>% levels() #> [1] "f" "m"
补充:更简短的写法
其实levels()支持直接接收数据框的列参数,所以还有一种更短的写法,不过可读性稍弱一点:
data %>% levels(sex) #> [1] "f" "m"
内容的提问来源于stack exchange,提问作者sbac
相关产品推荐
相关产品推荐

