gpt4 book ai didi

根据首次发病对数据进行排名

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:20:46 25 4
gpt4 key购买 nike

subset <- 
structure(list(MEMORY1 = c(3L, 2L, 3L, 2L), MEMORY2 = c(3L, 2L,
3L, 1L), MEMORY3 = c(2L, 2L, 3L, 2L), MEMORY4 = c(2L, 2L, 2L,
2L), MEMORY5 = c(2L, 2L, 2L, 2L), MEMORY6 = c(1L, 1L, 1L, 1L),
MEMORY7 = c(2L, 2L, 2L, 2L), MEMORY8 = c(1L, 1L, 1L, 1L)), .Names = c("MEMORY1",
"MEMORY2", "MEMORY3", "MEMORY4", "MEMORY5", "MEMORY6", "MEMORY7",
"MEMORY8"), row.names = c(NA, -4L), class = "data.frame")

subset
# MEMORY1 MEMORY2 MEMORY3 MEMORY4 MEMORY5 MEMORY6 MEMORY7 MEMORY8
# 1 3 3 2 2 2 1 2 1
# 2 2 2 2 2 2 1 2 1
# 3 3 3 3 2 2 1 2 1
# 4 2 1 2 2 2 1 2 1

我在 4 个时间点(4 行)有一个包含 8 个内存项的数据集。我正在尝试根据首次出现对内存项进行排名,首次出现定义为内存项的值第一次 > 1。

对于上述子集,项目 1、2、3、4、5 和 7 的排名为 1,因为在时间 1,这些项目的值为> 1. 至于第 6 项和第 8 项,它们在所有 4 个时间点的值 = 1,因此我会为它们分配 NA 的等级。

ranks = rep(0, items)
ranks = sapply(subset, function(x) which(x > 1)[1L])
ranks
# MEMORY1 MEMORY2 MEMORY3 MEMORY4 MEMORY5 MEMORY6 MEMORY7 MEMORY8
# 1 1 1 1 1 NA 1 NA

但是,由于 MEMORY1MEMORY21MEMORY3 时的值为 3,MEMORY4MEMORY5MEMORY71 时的值为 2,我想对 MEMORY1 进行排名code> 和 MEMORY2 在其他四项之前。所以我想要一个看起来像的输出

ranks
# MEMORY1 MEMORY2 MEMORY3 MEMORY4 MEMORY5 MEMORY6 MEMORY7 MEMORY8
# 1 1 2 2 2 NA 2 NA

因此 1) 按第一次出现排序 2) 将具有最高值的项目排序为 1,下一个最高值为 2,依此类推。

我怎样才能完成步骤 2)?

最佳答案

这为您提供了值:

wheremax <- sapply(subset,function(x) { which(x > 1)[1L] }) #your code
as.matrix(subset)[cbind(wheremax,1:ncol(subset))]
[1] 3 3 2 2 2 NA 2 NA

然后你可以获得一个排名:

DTrank <- rank(-as.matrix(subset)[cbind(wheremax,1:ncol(subset))] + wheremax * max(subset), ties.method = "min", na.last = "keep")
[1] 1 1 3 3 3 NA 3 NA

这会为每个额外的行增加一个惩罚,等于 data.frame 中任何地方的最大值。它确保第二行中的值始终排在第一行中的值下方

但它不是按增量排序的(即 1、2、3、...)。不过,较高的数字将始终具有较低的值。如果有更好的方法,欢迎提出建议。

关于根据首次发病对数据进行排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32879740/

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