gpt4 book ai didi

返回包含数据框中所有变量的最大值的列

转载 作者:行者123 更新时间:2023-12-05 01:33:40 25 4
gpt4 key购买 nike

zone_id=1:6
v1=c(12,22,31,12,5,17)
v2=c(15,22,28,16,18,21)
v3=c(18,10,14,9,10,17)
v4=c(20,3,2,5,12,21)
mydata=data.frame(zone_id,v1,v2,v3,v4)

我有一个可以使用上述代码制作的粗略模型的数据框。它由与地理区域相关的数据行组成。我有变量(在这个例子中是 4 个,但在我的实际数据集中有 69 个),其中包含在这些区域中的观察值的整数。
对于每个 zone_id,我想识别从 V1 到 V4 的变量,其中包含最大值。如果存在平局,我想返回包含关联最大值的每个变量的名称。所以对于 1 区,我想返回 V4,对于 2 区,我想返回 V1 和 V2,依此类推。

我对 R 非常陌生,因此无法进入第一垒。我浏览了 R 帮助文件,并认为可能有使用扫描的解决方案?任何帮助表示赞赏。

最佳答案

您可以使用 which(x == max(x))成语在这里使用apply()针对每一行运行:

apply(mydata[, -1], 1, function(x) which(x == max(x)))

这使:
> apply(mydata[, -1], 1, function(x) which(x == max(x)))
[[1]]
v4
4

[[2]]
v1 v2
1 2

[[3]]
v1
1

[[4]]
v2
2

[[5]]
v2
2

[[6]]
v2 v4
2 4

该列表包含最大变量的索引向量,这些向量的名称可以使用 names() 提取。给出实际的变量 ID:
> out <- apply(mydata[, -1], 1,  function(x) which(x == max(x)))
> names(out[[2]])
[1] "v1" "v2"
> lapply(out, names)
[[1]]
[1] "v4"

[[2]]
[1] "v1" "v2"

[[3]]
[1] "v1"

[[4]]
[1] "v2"

[[5]]
[1] "v2"

[[6]]
[1] "v2" "v4"

如果您的数据可能包含 NA那么我们需要更聪明一点,例如
apply(mydata[, -1], 1, 
function(x, na.rm = FALSE)
which(x == max(x, na.rm = na.rm)),
na.rm = TRUE)

其中我们可以传入是否忽略 NA或不。

关于返回包含数据框中所有变量的最大值的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8941851/

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