我想获取最大值并将字符串分配回数据框。我试图循环它。有什么建议?感谢
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
答案 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转换为矩阵,如果你有任何字符或因子列,它将产生一个字符矩阵。