今天早上,当用数据框做一些分析时,由于存在重复的列名,我得到了一个错误。我试图找到一个完全使用dplyr的解决方案,但我找不到任何可行的解决方案。这里是一个例子来说明这个问题。具有重复列名称的数据框。删除重复的列dplyr
x <- data.frame(matrix(c(1, 2, 3),
c(2,2,1),nrow=2,ncol=3))
colnames(x) <- c("a", "a", "b")
当我试图通过价值
使用SELECT命令我得到一个错误x %>%
select(-1)%>%filter(b>1)
Error: found duplicated column name: a
我可以使用传统的索引轻松摆脱列和使用dplyr过滤下降的第一列
x<-x[,-1]%>%filter(b>1)
产生所需输出
> x
a b
1 2 3
2 2 3
有关如何仅使用dplyr语法来执行此操作的任何想法?
井基础R,“右”方式可能是'x [!重复(names(x),fromLast = TRUE)]''。只要找到一种方法把它扔进dplyr的'select'动词。呵呵,即使'x%>%select(2,3)'也行不通,在看'select'语句之前抱怨LHS。我会打电话给一个错误。粗体解决方法:''%%%(。[!duplicated(names(。),fromLast = TRUE)])' – Frank
我通常只使用'make.names'来合法地重命名所有内容。 – alistaire
如果你深入挖掘,我认为你会发现邪恶的根源在于plyr和dplyr使用列名来选择数据。这需要列具有唯一的名称,它不会按名称和内容进行选择。基本软件包使用索引,这将起作用而不考虑命名范例。这是套餐的限制,大部分时间都值得这个限制。 – sconfluentus