【问题标题】:Using a function to create a new dataframe with unused elements使用函数创建具有未使用元素的新数据框
【发布时间】:2019-07-10 05:28:35
【问题描述】:

我有两个包含三个元素的向量。总共有 20 种组合,将所有六个元素重新排列成不同的两个向量集,其中包含三个元素。我需要编写可以做到这一点的 R 代码。

我当前的代码设置两个向量,将它们组合成一个向量,创建一个数据框,其中包含一个大小为 3 的单个向量的所有 20 个组合。我现在正在尝试编写一个函数,该函数将通过将二十个向量中的每一个与包含所有元素的向量进行比较,并查看哪些元素未使用(setdiff)来创建第二个大小为 3 的向量。但是,我不断得到一个空的新向量。请帮忙。

drug<-c(36, 60, 39)
placebo<-c(73, 55, 70)
drugandplacebo<-c(drug,placebo)
drugandplacebo
number<-1:20
t(number)
allcombdrug<-combn(drugandplacebo,3)
allcombdrug
tallcombdrug<-t(allcombdrug)
tallcombdrug
tallcombdrub<-data.frame(tallcombdrub)
tallcombdrug

func1 <- function(tallcombdrug) {
  allcorespplac <- data.frame()  

  for (i in 1:length(tallcombdrug)) { 
    allcorespplac[i] <- setdiff(drugandplacebo,tallcombdrug[i])
  }
}
func1
allcorespplac

【问题讨论】:

    标签: r function set-difference


    【解决方案1】:
    #list with all all combinations of three
    l1 <- combn(c(drug, placebo),3,simplify = FALSE)
    #list with all remaining values not in l1
    l2 <- lapply(l1, function(x) c(drug,placebo)[!c(drug,placebo) %in% x])
    

    更新:跟进

    library(data.table)
    cbind(
      data.table::rbindlist( lapply( l1, as.data.frame.list ) ),
      data.table::rbindlist( lapply( l2, as.data.frame.list ) )
    )
    

    【讨论】:

    • 感谢@Wimpel 的帮助!一个后续问题(如果我被允许这样做而无需从头开始提出另一个问题:我必须使用这两个向量执行计算并且这样做,我使用 as.numeric。我现在正在尝试结合所有这些向量都放在一个大表中,但是当我将这两个列为列时,每个值都表示“数字,3”而不是每组三个元素。我尝试使用 list(l1) 将其转换回来,然后再放入表,但现在它看到“列表,20。”我该怎么做才能列出每组三个?谢谢!
    猜你喜欢
    • 2021-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多