gpt4 book ai didi

r - 在行级别设置子集,但值必须是列名

转载 作者:行者123 更新时间:2023-12-04 00:00:31 25 4
gpt4 key购买 nike

想象一个数据框:

set.seed(1234)
data<-data.frame(id = sample(letters, 26, replace = FALSE),
a = sample(1:10,26,replace=T),
b = sample(1:10,26,replace=T),
c = sample(1:10,26,replace=T))

我想保留,每个 id ,最大值所在的列名。

我正在寻找的结果是一个尺寸为 26 x 2 的数据框,其中一列是 idlargest_value_var 的列. largest_value_var将包含 a , b , 或 c .

到目前为止,我已经能够使用以下方法提取与最大值相关联的变量名称:
apply(data[,-1], 1, function(x) c(names(x))[which.max(x)])

但是我似乎无法将我想要的结果放入数据框中...
任何帮助表示赞赏。

最佳答案

您可以使用 max.col() 轻松完成此操作。 .设置 ties.method = "first" (感谢 akrun),如果出现平局,我们将获得第一列。这是一个数据表方法:

library(data.table)
setDT(data)[, names(.SD)[max.col(.SD, "first")], by = id]

更新:似乎这种方法在基 R 中实现时会更有效,可能是因为 as.matrix()转换在 max.col() .所以这是在 base 中完成它的一种方法。
cbind(data[1], largest = names(data)[-1][max.col(data[-1], "first")])

感谢 Ananda Mahto 指出效率差异。

关于r - 在行级别设置子集,但值必须是列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27951747/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com