Анализ по строке с несколькими функциями в dplyr - PullRequest
0 голосов
/ 17 февраля 2019

Я пытаюсь проанализировать случаи (строки) data.frame с помощью dplyr, но безрезультатно.Для этого я создал две функции:

f1 <- function(x) {
  c(s = sum(x), 
    m = mean(x), 
    v = var(x))
}

f2 <- function(x) {
  apply(x, 1, f1)
}

My data.frame (data_1):

for (i in 1:6) {
  assign(paste('var', i, sep = '_'), 
runif(30, 20, 100))
}

data_1 <- do.call(
  cbind.data.frame, 
  mget(ls(pattern = '*v'))
)

Использование dplyr функций:

library(dplyr)

data_1 %>%
  mutate_at(.vars = vars (starts_with('v')),
            .funs = funs(.= f2))

data_1 %>%
  mutate_if(is.numeric, .funs = funs(.= f2))

Ошибка в mutate_impl (.data, dots): Ошибка оценки: dim (X) должна иметь положительную длину.

Поскольку анализ выполняется в строках, и у меня есть три функции (сумма, среднее и дисперсия), ожидаемый доход составляет три столбца.

1 Ответ

0 голосов
/ 18 февраля 2019

На самом деле, хотя и не считается устаревшим, rowwise () не очень хорошо работает с другими функциями группировки и суммирования, поэтому лучше его избегать в dplyr.Полезной альтернативой может быть группировка по номеру строки.Вот решение выше, используя этот подход.

colNames <- syms(paste0("var_", 1:6))
data_1 %>%
   group_by (row_number()) %>%
   summarize(dataMean = mean(!!!colNames),
             dataSum = sum(!!!colNames))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...