筛选存在重复列名的数据

干活的时候遇到的一个小问题,用cbind合并出来数据集df,里边有重复的列名“depth”,想用filter筛选其中一些行,

filter(df,result=="Ⅰ")

报错,提示depth不能复制。 Error: Column names depth, depth must not be duplicated. Use .namerepair to specify repair. Run rlang::lasterror() to see where the error occurred.

统计之都的大佬很快指出问题在于dpylr对数据的一致性有严格的要求,所以filter函数是不会支持这种数据集的。那么解决办法有哪些呢?

第一种,用基础包的基础功能,实际是能解决这个问题的,df[df$result=="Ⅰ",]是可以达到目的,但是不能用filter这种舒服的方法,总是憋得难受。

第二种就是要处理一下列名,然后再filter了,自己重命名或者janitor::clean_names 处理。

library(janitor)

resulttmpfirst <- filter(janitor::clean_names(tmp),result=="Ⅰ")

filter用上了,心里爽了,就是额外多了一个包,其实反而是麻烦了,感觉应该在cbind数据集的时候解决重名的问题。

liechi大佬给出了我最需要的方法:在cbind合并数据集的时候,使用data.frame(cbind()),自动把重复的列名重命名,后面就可以随便filter了。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注