我想要对数据框(df)进行子集化,以便仅包含第1列到第10列的每一行的最大值以及列的名称。
示例数据框:
0 1 2 3 4
0.01 0.12 0.41 0.11 0.11
0.13 0.12 0.33 0.14 0.07
0.02 0.20 0.11 0.27 0.17
0.11 0.33 0.04 0.09 0.24
0.08 0.07 0.04 0.05 0.58
目前我正在使用它:
new_df[] <- apply(df[, 1:4], 1, max) #get the max value of current row
new_df<- subset(new_df, select = c(1)) #keep only one column
我明白了:
0.41
0.33
0.27
0.33
0.58
但是我无法得到最大值来自的列名。
期望的结果:
2 0.41
2 0.33
3 0.27
1 0.33
4 0.58
提前感谢您的帮助。
答案 0 :(得分:3)
试试这个
> t(apply(df, 1, function(x) c(which.max(x)-1, max(x))))
[,1] [,2]
[1,] 2 0.41
[2,] 2 0.33
[3,] 3 0.27
[4,] 1 0.33
[5,] 4 0.58
另一种选择:
> t(apply(df, 1, function(x) as.numeric(c(names(which.max(x)), max(x)))))
[,1] [,2]
[1,] 2 0.41
[2,] 2 0.33
[3,] 3 0.27
[4,] 1 0.33
[5,] 4 0.58
正如DWin所建议的那样,另一种选择是:
t(apply(df, 1, function(x) as.numeric(c(names(x)[which.max(x)], max(x)))))