2017-04-03 46 views
4

下面是我的data.frame,它包含獎金和增量NA。如何顯示一個條件,符合條件,符合相應的列在data.frame在R

df 
name salary bonus increment(%) 
AK 22200 120 2 
BK 55000 34 .1 
JK 12000 400 3 
VK 3400 350 15 
DK 5699 NA NA 

df = structure(list(name = c("AK", "BK", "JK", "VK", "DK"), salary = c(22200L, 
55000L, 12000L, 3400L, 5699L), bonus = c(120L, 34L, 400L, 350L, 
NA), `increment(%)` = c(2, 0.1, 3, 15, NA)), .Names = c("name", 
"salary", "bonus", "increment(%)"), row.names = c(NA, -5L), class = "data.frame") 

基本上我想存儲那些有gat最高工資,最大獎金和最大增量的人的名字。

我曾嘗試低於

df[sapply(df[,2:4],function(x) which.max(x)),1] 
output: [1] "BK" "JK" "VK" 

但需要一個強大的方式,可以給相同的輸出上面的命令,但照顧NA爲好。另外我不確定使用,1是顯示名稱列的好東西。

+0

替換它們重新您的最後一句話,是啊,最好使用'DF [W, 「名」]'或'$ DF名[W]'或者'df [[「name」]] [w]',我想。 – Frank

+0

感謝@Frank的建議。 – Anurodh

回答

3

您是否正在尋找?

sapply(df[,2:4], function(x) df[which(x == max(x, na.rm = TRUE)),'name']) 

回報:

salary  bonus  increment(%) 
"BK"  "JK"  "VK" 
+0

是的JanLauGe,這一個是我正在尋找的東西。非常感謝 – Anurodh

1

我們可以換位數據框中使用max.col,以獲得最大的每一行。 max.col不處理NA的,我們可以用0

df$name[max.col(t(replace(df, is.na(df), 0))[-1, ])] 

#[1] "BK" "JK" "VK"