gpt4 book ai didi

R 在多个数据表列中搜索

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

我需要根据跨多列的条件对 data.table 进行子集化,然后对结果执行操作。

带有简单 data.table 的最小示例:

x <- data.table(id=c(1, 2, 3, 4), colour1 = c('red', 'green', 'green', 'blue'), 
colour2 = c('yellow', 'red', 'blue', 'black'),
colour3 = c('blue', 'black', 'red', 'yellow'),
score = c(0.7, 0.9, 0.2, 0.35))

然后我想找到包含颜色“黄色”的任何行的最高分数:
max_score <- max(x[colour1 == 'yellow' | colour2 == 'yellow' | colour3 == 'yellow']$score)

在这个例子中,上面的代码工作正常,但有没有更好的方法来检查多列的这种情况?在实践中,表会更大,列数可以改变,所以我想动态地做到这一点。

最佳答案

这可能会让人感到困难,因为您的数据格式很宽(即“不整洁”)。只需使用 melt 转换为长格式,这真的很简单。

melt(x, measure.vars = grep("^colo", names(x)))[,max(score[value == "yellow"])]
# [1] 0.7

或者
melt(x, measure.vars = grep("^colo", names(x)))[value == "yellow", max(score)]

要查看发生了什么,请先运行
melt(x, measure.vars = grep("^colo", names(x)))

然后是整个命令。

当然,您也可以分两步完成,以防您想保留长格式以供进一步计算:
x_tidy <- melt(x, measure.vars = grep("^colo", names(x)))
x_tidy[value == "yellow", max(score)]
#[1] 0.7

关于R 在多个数据表列中搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37965477/

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