which.max并将colnames值指定给R中的数据帧

时间:2014-01-10 09:00:03

标签: r

我想获取最大值并将字符串分配回数据框。我试图循环它。有什么建议?感谢

new<-data.frame(id=seq(1:5),att1=rnorm(5,1),att2=rnorm(5,1),att3=rnorm(5,1))
for (i in 1:nrow(new))
new$type<-names(which.max(new[i,2:4]))

id       att1       att2      att3 type
1 -1.1735401  0.1269600 0.6178781 att3
2  1.9650696 -0.2129732 0.5030030 att3
3 -0.0901813  4.3937726 1.1886939 att3
4  0.1719326  1.9478824 2.2497336 att3
5  2.1359702  2.3347643 2.6607773 att3

2 个答案:

答案 0 :(得分:3)

尝试apply;

new$type <- names(new)[apply(new[-1], 1, which.max) + 1]

  id        att1      att2       att3 type
1  1  1.77432474 0.3306480  0.9693518 att1
2  2 -0.00585121 0.2115700  0.6579220 att3
3  3  0.23611749 0.7180739  1.9325201 att3
4  4  0.43156117 0.9980831 -1.2525760 att2
5  5  2.10921757 1.3001635  0.4259629 att1

答案 1 :(得分:2)

names(new)[2:4][max.col(new[, 2:4])]

作为一般规则,请勿将apply与数据框一起使用。它会将输入df转换为矩阵,如果你有任何字符或因子列,它将产生一个字符矩阵。