列名为

时间:2017-05-05 09:09:12

标签: r dataframe max

示例数据:

df <- data.frame(one = c(T, F, F, F, F, T), 
                 two = c(F, F, F, F, T, F), 
                 three = c(F, T, T, T, F, F))  

真实数据有更多列,但这将作为一个例子。我需要一个在以下数据框中转换df的函数:

data.frame(type = c('one', 'three', 'three', 'three', 'two', 'one'))

我看了堆栈并融化了几个奇怪的解决方法,如下所示:

df.new <- data.frame(type = c(rep.int(NA, 6)))
for(i in 1:ncol(df)) {
  df.new[,1] <- ifelse(df[,i], colnames(df)[i], df.new[,1])
}
df.new

但有没有这样做的功能?

1 个答案:

答案 0 :(得分:1)

使用基础R中的max.col进行矢量化:

data.frame(type=names(df)[max.col(df)])

   # type
# 1   one
# 2 three
# 3 three
# 4 three
# 5   two
# 6   one