R语言获取data.frame每列最大值对应行号的实现方法
问题原因
你的代码核心错误是which()的参数不符合要求:which()需要传入逻辑判断条件,而你直接传入了max(x)(返回当前列的最大值数值),无法完成匹配查询,所以得不到正确结果。
正确实现方式
方法1:修正lapply逻辑
沿用你原本的写法,只需要把which()的参数改成列值等于最大值的判断条件即可:
# 先得到每列最大值对应行号的list res_list <- lapply(Data, function(x) which(x == max(x))) # 转成你需要的data.frame格式 res_df <- as.data.frame(res_list)
运行后res_df输出和你期望的完全一致:
V1 v2 v3 1 5 5 3
方法2:内置函数简洁实现
使用R自带的max.col()函数可以更高效地完成需求,只需要先把数据框转置,把原数据的列转为转置后的行即可:
res_df <- as.data.frame(as.list(max.col(t(Data))))
提示:如果某列存在多个相同的最大值,
which(x == max(x))会返回所有匹配的行号;如果需要固定取第一个/最后一个最大值的行号,可以给max.col指定ties.method参数,可选值为"random"、"first"、"last"。
内容的提问来源于stack exchange,提问作者Vinicius B. de S. Moreira
相关产品推荐
相关产品推荐

