获取每行的最大值列的名称

时间:2013-09-30 06:12:20

标签: r

我需要你的帮助,我有这样的数据框

int x  y  z
1   0  1  0
2   1  0  0
3   0  0  1

我需要的结果必须像这样

int letter

1    y
2    x
3    z

我的代码是:

for (i in 1:nrow(samples)) 
    for(j in 1:ncol(samples)) 
        if(samples[i,][,j] == 1) print(c(i,names(samples[i,j])))

但它没有显示第二列,我需要保存在新的data.frame,任何建议?感谢。

3 个答案:

答案 0 :(得分:5)

您可以使用max.col

dat$newcol <- names(DF)[-1][max.col(DF[-1])]

这给出了

  int x y z newcol
1   1 0 1 0      y
2   2 1 0 0      x
3   3 0 0 1      z

答案 1 :(得分:4)

我确信有很多方法,但这里有一个:

samples <- read.table(text="int x  y  z
1   0  1  0
2   1  0  0
3   0  0  1",
header=TRUE)

#  int x y z
#1   1 0 1 0
#2   2 1 0 0
#3   3 0 0 1

data.frame(
 samples[1],
 letter=colnames(samples[-1][apply(samples[-1],1,which.max)])
)

#  int letter
#1   1      y
#2   2      x
#3   3      z

答案 2 :(得分:0)

this类似问题的解决方案。

tdf <- data.frame(
  A = c(1,1,0,0),
  B = c(0,0,1,0),
  C = c(0,0,0,1)
)

library(magrittr)

tdf %>%
  lapply(sum) %>%
  (function(x){
    a <- c()
    for(i in 1:length(x)){
      a <- c(a, rep(names(x[i]), x[i]))
    }
    return(a)
  })