示例数据:
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
但有没有这样做的功能?
答案 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