R语言中使用管道符(%>%)调用unique()函数失效问题咨询
解决管道操作符(%>%)调用unique函数的错误问题
这个问题其实是管道操作符的参数传递逻辑搞混啦!当你用df %>% unique(.$a)的时候,管道会自动把df作为第一个参数传给unique(),这时候你写的.$a就变成了unique()的第二个参数——而unique()的第二个参数是incomparables,这显然不是你想要的,所以才会抛出那个错误。
这里给你几种可行的解决办法:
方法1:先提取列再去重
如果你只需要a列的唯一值向量,可以先用pull()提取列,再调用unique():
df %>% pull(a) %>% unique() # 输出:[1] 1 2 3
要是想保留数据框格式,就用select()先选列:
df %>% select(a) %>% unique() # 输出: # a # 1 1 # 2 2 # 3 3
方法2:用大括号改变参数传递逻辑
用大括号{}把unique()的调用包裹起来,这样管道就不会自动把df作为第一个参数传入,你可以手动指定参数:
df %>% {unique(.$a)} # 输出:[1] 1 2 3
方法3:用dplyr的distinct()函数(更推荐)
既然你在用管道,大概率是在使用tidyverse工具链,dplyr里的distinct()专门用来处理数据框的去重,用法更直观:
- 只保留
a列的唯一值(数据框格式):
df %>% distinct(a)
- 如果要保留整行数据,但只根据
a列去重:
df %>% distinct(a, .keep_all = TRUE) # 输出: # a b # 1 1 a # 2 2 a # 3 3 a
内容的提问来源于stack exchange,提问作者Rtist
相关产品推荐
相关产品推荐

