2017-08-02 18 views
-1

的數據幀我有如下一個數據幀:充分利用不同列中的最大值作爲R

H A B C D 
------------------ 
X 1 10 2 11 
Y 2 15 8 14 
Z NA 23 NA 16 
W 5 67 5 NA 
X 4 1 6 2 
Y 1 3 2 9 
Z 2 NA 9 17 

能否請你告訴我R命令,給了我相應的H值爲爲A的最大值, B的最大值,C的最大值和D的最大值,並將數據存儲在向量中。

在COL的最大值是5,在列B的最大值爲67,在欄C最大值9和d最大值是17。

我的新載體應具有ħ引用作爲「W」 , 'W', 'Z', 'Z'

感謝

+0

選項這就是我正在尋找..非常感謝你.. –

+0

有沒有其他的解決辦法? –

+0

你可以試試'apply' – Wen

回答

3
data$H[sapply(data[,-1],which.max)] 
+0

我認爲你有正確的想法。儘管你可以縮短一點 - 'dat $ H [sapply(dat [-1],which.max)]' – thelatemail

+0

which.max只需要一個參數。在一個包含NA的向量中,max.max將返回NA,爲了使用它,我們仍然必須編寫一個函數: dat $ H [sapply(dat [-1],function(x)which.max(na.omit (x)))] – Onyambu

+0

對於值爲'5'的索引,不能,which.max(c(NA,1,NA,3,4,5))返回'6'。按照'which.max' - 「*丟失和'NaN'值被丟棄。*」 – thelatemail

1

嘗試使用reshapedplyr

DF=melt(df) 
DF=DF%>%group_by(variable)%>%slice(which.max(value)) 
DF 
# A tibble: 4 x 3 
# Groups: variable [4] 
     H variable value 
    <chr> <fctr> <int> 
1  W  A  5 
2  W  B 67 
3  Z  C  9 
4  Z  D 17 

如果您需要vector,只需要DF$H

[1] "W" "W" "Z" "Z" 
2

下面是使用base R

m1 <- t(df1[-1]) 
df1[,1][max.col(replace(m1, is.na(m1), 0), "first")] 
#[1] "W" "W" "Z" "Z" 
+0

@ user2071685在這裏,一個很好的替代解決方案!+1 – Wen

+0

這對我來說有點複雜。您正在轉換基於列的data.frame,將其轉換爲矩陣,然後將行視爲列的代理。爲什麼不直接從列開始看?除非它明顯更快(我懷疑它,但你永遠不知道)。 – thelatemail

+0

@thelatemail是的,你是對的。轉置不需要。接受的答案看起來不錯 – akrun