【问题标题】:Creating a vector of rank or index创建等级或索引向量
【发布时间】:2019-02-17 20:30:48
【问题描述】:

我有两个原始向量,每个向量都有三个值(总共 6 个)。总共有 20 种方法可以将六个总值重新排列成两组新的向量,每组包含三个元素。

对于这三个组合中的每一个,我需要创建一个新向量,列出每个元素相对于所有元素排名的排名。例如,完整的集合值为 [36,39,55,60,70,73],三个的组合为 [36,55,70]。由于该子集包含排名第一、第三和第五的值,因此我需要一个为 [1,3,5] 的向量。希望这是有道理的。

我希望尝试使用涉及 lapply 的某种代码来解决问题,但无法使其正常工作。请帮忙!

#list of values for those who took drug
drug<-c(36, 60, 39)

#list of values for those who took placebo
placebo<-c(73, 55, 70)

#all values combined into one vector, in order
drugandplacebo<-c(drug,placebo)
drugandplacebo<-sort(drugandplacebo)
drugandplacebo
order(drugandplacebo)

#list with all all combinations of three for drug
drugcomb <- combn(drugandplacebo,3,simplify = FALSE)
drugcomb<-as.numeric(drugcomb)
drugcomb


#list with all remaining values not in drugcomb
placcomb <- lapply(drugcomb, function(x) drugandplacebo[!drugandplacebo %in% x])
placcomb<-as.numeric(placcomb)
placcomb

【问题讨论】:

  • 您有这么多问题且答案不被接受是不是有什么特别的原因?
  • 反过来说。你已经对元素进行了排序;这意味着他们的排名是1:6。计算combn(1:6, 3, simplify=FALSE),你就会得到你想要的。

标签: r vector z-index rank


【解决方案1】:

您可以使用 lapply 和 match() 函数来做到这一点,例如这里(这是使用您的代码但名称简化的):

#list of values for those who took drug
d <-c (36, 60, 39)

#list of values for those who took placebo
p <- c(73, 55, 70)

#all values combined into one vector, in order
dp <- sort(c(drug,placebo))

#list with all all combinations of three for drug
dpcomb <- combn(drugandplacebo,3,simplify = FALSE)

#list with all remaining values not in drugcomb
ldp <- lapply(dpcomb, match, dp)
ldp

【讨论】:

    猜你喜欢
    • 2018-04-20
    • 1970-01-01
    • 2014-11-13
    • 2020-10-25
    • 2020-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多