Группируйте по одной переменной, но summary() поверх всех других переменных (mean) в R

#r #group-by #mean

#r #группировать по #среднее

Вопрос:

Я знаю, что уже есть несколько тем по этому поводу, но я еще не нашел ни одной об этой конкретной проблеме. Зависимой переменной в моем наборе данных является Y, и у меня есть 144 независимые переменные. Y и X могут принимать только значения 1 или 0. Данные выглядят следующим образом

           Y    A469 T593 K022K A835 Z935 U83F W5326  ...
 Person1  1      1    1    1     0    0    0    0
 Person2  1      0    1    0     1    1    0    0
 Person3  0      0    0    1     0    0    1    1
 ...
summary(dataset)
  

просто предоставляет описательную статистику по всем наблюдениям. Чего я хочу, так это (в псевдокоде):

 summary(all variables if Y == 1 and Y == 0)
  

Было бы здорово, если бы я мог видеть, как часто определенный X встречается в определенном значении Y. Например, среднее значение (X4) = 0.04 и количество = 6, если Y = 1.

Комментарии:

1. Пожалуйста, предоставьте более полный набор данных для работы. Вы можете и должны использовать dput для предоставления выборочных данных.

2. @NelsonGon Смелое утверждение после того, как на него уже почти был дан ответ. Я полностью за воспроизводимые примеры, и, конечно, dput() это приятнее, но это и так достаточно ясно.

3. @Gregor мне показалось, что недостаток данных затрудняет поиск «идеального» решения. Мои извинения!

Ответ №1:

РЕДАКТИРОВАТЬ 2 после комментариев Акруна и Грегора вот решение

  data_summary <- dataset %>% group_by(y) %>% 
    mutate(n = n()) %>%
    summarise_all(mean)
  

Если вы хотите видеть больше столбцов, чем умещается на вашем экране, вы можете попробовать, например,

  • print(data_summary, width = 20)
  • View(data_summary)
  • select(data_summary, <<particular columns you want to see>>)

Комментарии:

1. Я получаю это сообщение об ошибке: Ошибка в UseMethod («groups»): нет применимого метода для ‘groups’, применяемого к объекту класса «c (‘double’, ‘numeric’)»

2. не могли бы вы, пожалуйста, предоставить образец ваших данных?

3. Я думаю, что count проблема. Вам может понадобиться n()

4. попробуйте n вместо n()

5. Вы правы, это показывает только первые 10 переменных. Они все есть, они просто не напечатаны. Сохраните результат как data_summary или что-то еще и просмотрите его с помощью чего-то другого, кроме метода печати по умолчанию для tibbles. print.data.frame(data_summary) , View(data_summary) , write.csv(data_summary) print(data_summary, width = Inf) и т.д.