gpt4 book ai didi

仅从 data.frame 中的某些选定列返回包含最大值的列的名称

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

我想获取(在 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 则有效。

你会如何处理这个问题?

确实非常感谢。

最佳答案

我们使用 grep为以“s”开头、后跟数字 (“i1”) 的列创建列索引。要获取具有最大值的子集数据集 ('df1[i1]') 的行索引,我们可以使用 max.col带有选项 ties.method='last' .要将只有 0 个值的行转换为 NA,我们得到 rowSums ,检查它是否为 0 ( ==0 ) 并将它们转换为 NA ( NA^ ) 并乘以 max.col输出。这可用于提取子集数据集的列名。

i1 <- grep('^s\\d+', names(df1))
names(df1)[i1][max.col(df1[i1], 'last')*NA^(rowSums(df1[i1])==0)]
#[1] "s2" NA "s4" "s1"

关于仅从 data.frame 中的某些选定列返回包含最大值的列的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32503978/

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