今天早上,當用數據框做一些分析時,由於存在重複的列名,我得到了一個錯誤。我試圖找到一個完全使用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