Использование функции для создания нового кадра данных с неиспользуемыми элементами - PullRequest
0 голосов
/ 16 февраля 2019

У меня есть два вектора с тремя элементами.Всего существует двадцать комбинаций, состоящих из всех шести элементов и их перегруппировки в разные наборы из двух векторов с тремя элементами.Мне нужно написать код R, который будет делать это.

Мой текущий код устанавливает два вектора, объединяет их в один вектор, создает кадр данных со всеми двадцатью комбинациями одного вектора размера три.Сейчас я пытаюсь написать функцию, которая создаст второй вектор размером три, сравнив каждый из двадцати векторов с вектором со всеми элементами и увидев, какие элементы не используются (setdiff).Тем не менее, я продолжаю получать пустой новый вектор.Пожалуйста, помогите.

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

1 Ответ

0 голосов
/ 16 февраля 2019
#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 ) )
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...