R 基于首次发病的排名数据
但是,由于R 基于首次发病的排名数据,r,algorithm,rank,R,Algorithm,Rank,但是,由于MEMORY1和MEMORY2在时间1和MEMORY3,MEMORY4,MEMORY5和MEMORY7在时间1的值为2,我想将MEMORY1和MEMORY2排在其他四项之前。所以我想要一个如下的输出 ranks = rep(0, items) ranks = sapply(subset, function(x) which(x > 1)[1L]) ranks # MEMORY1 MEMORY2 MEMORY3 MEMORY4 MEMORY5 MEMORY6 MEMORY7 MEM
MEMORY1
和MEMORY2
在时间1
和MEMORY3
,MEMORY4
,MEMORY5
和MEMORY7
在时间1
的值为2,我想将MEMORY1
和MEMORY2
排在其他四项之前。所以我想要一个如下的输出
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
因此,1)按第一个开始排序2)将最高值的项目排序为1,次高值的项目排序为2,以此类推
如何完成步骤2)?这将为您提供以下值:
ranks
# MEMORY1 MEMORY2 MEMORY3 MEMORY4 MEMORY5 MEMORY6 MEMORY7 MEMORY8
# 1 1 2 2 2 NA 2 NA
wheremax 1[1L]}#您的代码
矩阵(子集)[cbind(其中max,1:ncol(子集))]
[1] 3 3 2 2 2 NA 2 NA
然后您可以获得一个等级:
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这将为您提供以下值:
ranks
# MEMORY1 MEMORY2 MEMORY3 MEMORY4 MEMORY5 MEMORY6 MEMORY7 MEMORY8
# 1 1 2 2 2 NA 2 NA
wheremax 1[1L]}#您的代码
矩阵(子集)[cbind(其中max,1:ncol(子集))]
[1] 3 3 2 2 2 NA 2 NA
然后您可以获得一个等级:
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首先,获取秩和值:
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
最后一击:
> df
rank val memory final
MEMORY1 1 -3 1 1
MEMORY2 1 -3 2 1
MEMORY4 1 -2 4 2
MEMORY5 1 -2 5 2
MEMORY7 1 -2 7 2
MEMORY3 2 -2 3 3
MEMORY6 Inf -Inf 6 4
MEMORY8 Inf -Inf 8 4
最终排名最终排名
[1] 1 1 3 2 2 4 2 4
我真不敢相信它会这么黑。一开始它真的觉得很琐碎。一定有更好的办法
请注意,我稍微更改了您的数据,因为您只有1和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
最后一击:
> df
rank val memory final
MEMORY1 1 -3 1 1
MEMORY2 1 -3 2 1
MEMORY4 1 -2 4 2
MEMORY5 1 -2 5 2
MEMORY7 1 -2 7 2
MEMORY3 2 -2 3 3
MEMORY6 Inf -Inf 6 4
MEMORY8 Inf -Inf 8 4
最终排名最终排名
[1] 1 1 3 2 2 4 2 4
我真不敢相信它会这么黑。一开始它真的觉得很琐碎。一定有更好的办法
请注意,我稍微更改了您的数据,因为您只有1和NA,因此无法判断代码是否正常工作。感谢您的回复,但我要感谢一个子集,如结构(列表(MEMORY1=c(2L,3L,2L,2L,2L,2L),MEMORY2=c(2L,2L,2L,3L),MEMORY4=c(3L,3L,3L,3L),MEMORY5=c(2L,2L,2L,2L,4L),MEMORY6=c(1L,2L,1L,1L),MEMORY7=c(2L,3L,2L,3L),MEMORY8=c(2L,3L,1L,2L)),.Names=c(“MEMORY1”,“MEMORY2”,“MEMORY3”,“MEMORY4”,“MEMORY5”,“MEMORY6”,“MEMORY7”,“MEMORY8”),row.Names=c(NA,--4L),class=“data.frame”)
第6项应该排在最后,因为它的第一次出现时间比其他项晚。然而,这并没有反映在你的建议中。@Adrian对不起我的错误,我错过了那个细微差别。编辑以反映感谢您的回复,但对于一个子集,如结构(列表(MEMORY1=c(2L,3L,2L,2L,2L,1L),MEMORY2=c(2L,2L,1L,1L),MEMORY3=c(2L,2L,2L,2L,3L),MEMORY4=c(3L,3L,3L,3L),MEMORY5=c(2L,2L,2L,4L),MEMORY6=c(1L,2L,2L,1L,1L),MEMORY7=c(2L,3L,3L,3L),MEMORY8,3L),3L),3L,3L=c,3L,3L=c)(“MEMORY1”、“MEMORY2”、“MEMORY3”、“MEMORY4”、“MEMORY5”、“MEMORY6”、“MEMORY7”、“MEMORY8”,row.names=c(NA,-4L),class=“data.frame”)
第6项应该排在最后,因为它的第一次出现时间比其他项晚。但是这没有反映在您的建议中。@阿德里安,对不起,我错了,我错过了这个细微差别。编辑为reflect,就像在rank\u和\u val
中首先组织信息一样,但我想将相同的排名分配给具有相同排名的项目和rank\u和
中的值,因此本质上我想为MEMORY1
和MEMORY2
分配一个1的等级。我该怎么做呢?@Adrian编辑了我的答案,现在它可以做你想做的事情了我喜欢先在rank\u和
中组织信息的想法,但我想给具有相同等级的项目在rank\u和
中的秩和值相同,因此本质上我想为MEMORY1
和MEMORY2
分配一个秩为1的值。我该怎么做呢?@Adrian编辑了我的答案,现在它满足了你的要求