2014-01-24 83 views
0

獲得值的出現我已經在多個問題中搜索了類似的內容,但是我無法找到我正在尋找的內容。 如果這篇文章是重複的,那麼我很抱歉,如果你能把我轉到正確的問題,我將不勝感激。在發佈這個問題之前根據條件

,我有以下數據:

data<-data.frame(a=c(0:10),b=c(5:15),c=c(10:20),d=c(1:5,15:20)) 

和我「簡單的」尋找與最大值,以獲得該行的列名。我做到與

names(data)[apply(data,1,which.max)] 

其實這個任務,因爲有兩列(C & d [6:10]),它符合最高的情況下,我真的想獲得是一樣的東西:

result<-c("c","c","c","c","c","double","double","double","double","double") 

因此,由於.max的行爲只允許(至少在我看來)只得到第一個元素,我想到了什麼可以是一個非常複雜的解決方案。 查找每行的重複元素,然後,如果這些索引中的任何一個與來自與.max代碼中的索引匹配,則將其更改爲「double」。或多或少像這樣:

index<-t(apply(data,1,function (x) duplicated(x,fromLast=TRUE))) 
colnames(index)<-colnames(data) 

再次提示任何技巧將超過讚賞!

回答

3

可能是您可以通過直接使用whicharr.ind參數來簡化您的方法。

data <- data.frame(a = c(0:10), b = c(5:15), c = c(10:20), d = c(1:5, 15:20)) 
ind <- which(data == max(data), arr.ind = TRUE) 
ind 
##  row col 
## [1,] 11 3 
## [2,] 11 4 

names(data)[ind[,2]] 
## [1] "c" "d" 

編輯

要每行具有相同的結果

lapply(apply(data, 1, function(x) which(x == max(x), arr.ind = TRUE)), names) 
## [[1]] 
## [1] "c" 

## [[2]] 
## [1] "c" 

## [[3]] 
## [1] "c" 

## [[4]] 
## [1] "c" 

## [[5]] 
## [1] "c" 

## [[6]] 
## [1] "c" "d" 

## [[7]] 
## [1] "c" "d" 

## [[8]] 
## [1] "c" "d" 

## [[9]] 
## [1] "c" "d" 

## [[10]] 
## [1] "c" "d" 

## [[11]] 
## [1] "c" "d" 
+0

嗯,不幸被這樣看來我得到最大價值的指標在所有數據,不僅行。無論如何,謝謝你的建議! – stefano

+0

@stefano檢查我編輯的答案。 – dickoa

+0

這就是我正在尋找的!非常感謝你的幫助,我非常感謝! – stefano