使用函数创建包含未使用元素的新数据框
Using a function to create a new dataframe with unused elements
我有两个包含三个元素的向量。总共有二十种组合,将所有六个元素重新排列成具有三个元素的两个向量的不同集合。我需要编写 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
#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 ) )
)
我有两个包含三个元素的向量。总共有二十种组合,将所有六个元素重新排列成具有三个元素的两个向量的不同集合。我需要编写 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
#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 ) )
)