R: Создать фрейм данных со всеми возможными перестановками и комбинациями уникальных значений, которые каждый столбец принимает в фрейме данных. - PullRequest
0 голосов
/ 03 апреля 2019

У меня большой фрейм данных, и я хочу создать из него еще один фрейм данных, который позволит мне проверять корреляцию переменной ("rate") с переменной "out" для каждой возможной комбинации уникальных значений, которые есть в других столбцах,Да, данные будут также подмножеством для комбинации.Например:

> data = data.frame(a=c(1,1,1,2,2,3),
              b=c("apples", "oranges", "apples", "apples", "apples", "grapefruit"),
              c=c(12, 22, 22, 45, 67, 28), 
              d=c("Monday", "Monday", "Monday", "Tuesday", "Wednesday", "Tuesday"),
              out = c(12, 14, 16, 18, 20, 22),
              rate = c(0.01, 0.02, 0.03, 0.04, 0.07, 0.06))

Я хочу проверить соотношение скорости без для каждой комбинации фрейма данных.то есть вывод должен быть как

> datacorr
  comb                    correlation
  1, apples               xxx
  1, apples, 12           xxx
  1, apples, 12, Monday   xxx
  1,2,3, apples           xxx
  Monday, Tuesday, apples xxx

Я пытаюсь создать фрейм данных со всеми уникальными значениями как:

dim.data <- do.call(expand.grid,lapply(data,unique))

и пытаюсь перейти отсюда.

Друг сделал это для одного столбца:

z <- (data %>% select(c) %>% distinct())$c

kp <- function(gg, r) 
  {
  corr1 <- data.frame(x = character(), corr = numeric())
  p <- unlist(lapply(1:r, function(y) {combn(gg, y, FUN = paste, collapse = ", ")}))

  dat <- lapply(1:length(p), function(y){
    k <- as.integer(strsplit(p[y], ",")[[1]])
    corr <- (data %>% filter(a %in% k) %>% select(out, rate) %>% cor %>% as.data.frame())$rate[1]
    corr1 <- add_row(corr1, x= p[y], corr=corr)
  })
  final <- do.call(rbind, dat)
  return(final)
}

Однако это не работает в Windows, но отлично работает на Mac.Может кто-нибудь также помочь мне отредактировать его для запуска для Windows?Я пытался, но безуспешно.

...