Запуск нескольких корреляций одновременно в R - PullRequest
0 голосов
/ 28 марта 2020

Я пытаюсь запустить несколько корреляций в R, адаптируя код, который я использовал для регрессий.

Это существующий код, который я успешно использовал для регрессий.

combineddvs <- colnames(dfc[,87:100])
form <- paste("yourbehavior_c ~ days + days2 +", combineddvs)
models <- form %>%
  set_names(combineddvs) %>%
  map(~lm(.x, data = dfc))
map(models, summary)

Это моя адаптация для корреляций, которые я хотел бы выполнить.

combineddvs <- c("committed", "goodfaith", "strongfeel")
form <- paste("df$main, df$", combineddvs)
models <- form %>%
  set_names(combineddvs) %>%
  map(~cor(.x))
map(models, summary)

Первые две строки работают, но я получаю эту ошибку при попытке создать "модели" объекта:

Error in cor(.x) : supply both 'x' and 'y' or a matrix-like 'x'

Я знаю, что мне нужны и x, и ay для запустить корреляцию. Тем не менее, я пытаюсь включить оба из них в объект «формы».

Это неуклюжий способ показать, что я пытаюсь сделать. У меня более 3 предметов, так что на практике это неэффективно.

cor(df$main, df$committed)
cor(df$main, df$goodfaith)
cor(df$main, df$strongfeel)

Как я могу это сделать? Я открыт для модификации приведенного выше кода или для использования совершенно другого подхода.

Ответы [ 2 ]

2 голосов
/ 29 марта 2020

С data.table вы можете использовать .SD вместе с lapply. Например, с mtcars данными:

library(data.table)
dt <- data.table(mtcars)

dt[, .(lapply(.SD, cor, mpg)), .SDcols = colnames(dt)[2:length(colnames(dt))]]

Итак, в вашем примере,

dt[, .(lapply(.SD, cor, main)), .SDcols = c("committed","goodfaith","strongfeel")]]
0 голосов
/ 29 марта 2020

Мы можем использовать dplyr

library(dplyr)
mtcars %>%
     summarise_at(-1, ~ cor(., mpg))
#     cyl       disp         hp      drat         wt     qsec        vs        am      gear       carb
#1 -0.852162 -0.8475514 -0.7761684 0.6811719 -0.8676594 0.418684 0.6640389 0.5998324 0.4802848 -0.5509251
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...