【发布时间】:2015-09-10 14:00:06
【问题描述】:
我想(在 data.table 的新列中)获取包含 data.frame 中仅几列中最大值的列的列名。
这是一个示例 data.frame
# creating the vectors then the data frame ------
id = c("a", "b", "c", "d")
ignore = c(1000,1000, 1000, 1000)
s1 = c(0,0,0,100)
s2 = c(100,0,0,0)
s3 = c(0,0,50,0)
s4 = c(50,0,50,0)
df1 <- data.frame(id,ignore,s1,s2,s3,s4)
(1) 现在我想从 s1-s4 列中找到每行中最大数量的列名。 (即忽略名为“ignore”的列)
(2) 如果最大值相同,我希望返回最后一个(例如 s4)列名。
(3) 作为一个额外的帮助 - 如果全部为 0,我希望 NA 返回
这是我迄今为止最好的尝试
df2 <- cbind(df1,do.call(rbind,apply(df1,1,function(x) {data.frame(max.col.name=names(df1)[which.max(x)],stringsAsFactors=FALSE)})))
这在每种情况下都会返回忽略,并且(b 行除外)如果我删除此列并将 s1-s4 列重新排序为 s4-s1 则有效。
你会如何处理这个问题?
非常感谢。
【问题讨论】:
-
我同意这不是完全重复的,除了第 (1) 点。