Создать несколько данных, которые учитывают уникальные значения каждой переменной, используя dplyr и loop - PullRequest
0 голосов
/ 27 июня 2019

У меня есть вопрос по программированию с использованием dplyr и цикла for для создания нескольких данных.Код без цикла работает очень хорошо, но код с циклом for не дает мне ожидаемого результата, а также сообщение об ошибке.

Сообщение об ошибке было похоже на:

"Ошибкав UseMethod ("select_"): нет применимого метода для 'select_', примененного к объекту класса "персонаж"

Пожалуйста, кто-нибудь поставит меня на правильный путь.

Кодниже работал

B <- data %>% select (column1) %>% group_by (column1) %>% arrange (column1) %>% summarise (n = n ())

Код ниже не работал

column_list <- c ('column1', 'column2', 'column3')

for (b in column_list) {

 a <- data %>% select (b) %>% group_by (b) %>% arrange (b) %>% summarise (n = n () )
 assign (paste0(b), a)
}

1 Ответ

1 голос
/ 27 июня 2019

Не использовать assign.Вместо этого используйте списки.

Мы можем использовать _at вариации dplyr, которые работают с символьными переменными.

library(dplyr)

split_fun <- function(df, col) {
  df %>% group_by_at(col) %>% summarise(n = n()) %>% arrange_at(col)
}

, а затем используйте lapply / map, чтобы применить его к разным столбцам

purrr::map(column_list, ~split_fun(data, .))

Это вернет вам список фреймов данных, доступ к которым можно получить с помощью [[индивидуально при необходимости.


Использование примера с mtcars

df <- mtcars
column_list <- c ('cyl', 'gear', 'carb')

purrr::map(column_list, ~split_fun(df, .))

#[[1]]
# A tibble: 3 x 2
#    cyl     n
#  <dbl> <int>
#1     4    11
#2     6     7
#3     8    14

#[[2]]
# A tibble: 3 x 2
#   gear     n
#  <dbl> <int>
#1     3    15
#2     4    12
#3     5     5

#[[3]]
# A tibble: 6 x 2
#   carb     n
#  <dbl> <int>
#1     1     7
#2     2    10
#3     3     3
#4     4    10
#5     6     1
#6     8     1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...