2017-03-21 94 views
1

我試圖讓基於其內容R. 例如,一個data.frame列名列數據,在取得列名基於R中

dd= data.frame(col1=c(1,2,3), col2=c(4,5,6), col3=c(4,4,4)) 

我找一個什麼東西當我餵它時,返回col1c(1,2,3)

我發現這個advice elsewhere但它不適合我;時,所建議的,我試試這個

colnames(dd)[which(dd == c(1,2,3), arr.ind = TRUE)] 
colnames(dd)[which(dd == c(1,2,3), arr.ind = TRUE)[2]] 

它返回的各種事情,這裏的結果爲1:

[1] "col1" "col2" "col3" "col1" "col1" "col1" 
  • 什麼是做到這一點的最好方法是什麼?

  • 上述方法是否正確;你能解釋一下它究竟做了什麼嗎?

  • 我很驚訝這裏沒有發現任何東西;如果它是重複的,我會很高興的鏈接/搜索條件。

感謝您的幫助!使用identical

回答

3

的一種方式,

names(dd)[sapply(dd, function(i)identical(i, c(1, 2, 3)))] 
#[1] "col1" 

names(dd)[sapply(dd, function(i)identical(i, c(4, 5, 6)))] 
#[1] "col2" 
+1

另外'setequal'如果OP想相同的內容,而是讓每一個獨特的元素不同的順序/計數。 – lmo

+0

不錯,工作很好,謝謝你的幫助!快速後續問題:在'colnames'上使用'names'有什麼優點/區別嗎?他們似乎給了我同樣的結果。 – patrick

+1

對於數據幀,這兩個是相同的。但是,「名稱」在矩陣上不起作用。那就是據我所知 – Sotos