Как вы перебираете два отдельных списка столбцов в одном фрейме данных, чтобы создать несколько таблиц в R?

Я изо всех сил пытаюсь понять, как использовать purr::map2 для создания нескольких таблиц с использованием двух разных списков столбцов в фрейме данных. Цель двоякая: 1) определить, чем отличаются столбцы.

Ниже приведен пример игрушечного фрейма данных, с которым я работаю (фактический фрейм данных имеет около 300 столбцов, из которых мне интересно сравнить 100 пар, то есть 200.

df = data.frame(a = c(1, 2, 3), b = c(2,3,8), a1 = c(1, 2, 3), b1 = c(2, 3, 9))

   a b   a1 b1   ….
1  1 2    1  2
2  2 3    2  3
3  3 8    3  9

Я понимаю, что есть несколько способов выполнить мою задачу. Как я уже сказал, моя первоначальная идея состояла в том, чтобы перебрать несколько столбцов, используя мурлыканье, а затем создать список таблиц.



names1 <- c("a", "b")
names2 <- c("a1", "b2")

df %>% purr::map2(~table(.$names1, .$names2, useNA = "always))

Я ожидаю, что список будет выглядеть примерно так, как показано ниже.


       1 2 3 <NA>            
  1    1 0 0    0
  2    0 1 0    0
  3    0 0 1    0
  <NA> 0 0 0    0


       2 3 9 <NA>
  2    1 0 0    0
  3    0 1 0    0
  8    0 0 1    0
  <NA> 0 0 0    0

Вместо этого я получаю следующую ошибку:

Error in as_mapper(.f, ...) : argument ".f" is missing, with no default

person atirvine88    schedule 07.08.2019    source источник
comment
Если вы выполняете множество задач с этими данными, вы можете сначала рассмотреть возможность использования tidyr::gather(). Тогда вы сможете выполнять такие действия, как выбор и фильтрация по различным полям данных. Это может помочь!   -  person Jacqueline Nolis    schedule 07.08.2019


Ответы (1)


df <- data.frame(a = c(1, 2, 3), b = c(2,3,8), a1 = c(1, 2, 3), b1 = c(2, 3, 9))
names1 <- c("a", "b")
names2 <- c("a1", "b1")

purrr::map2(names1, names2, ~table(df[[.x]], df[[.y]], useNA = "always"))
#> [[1]]
#>       
#>        1 2 3 <NA>
#>   1    1 0 0    0
#>   2    0 1 0    0
#>   3    0 0 1    0
#>   <NA> 0 0 0    0
#> 
#> [[2]]
#>       
#>        2 3 9 <NA>
#>   2    1 0 0    0
#>   3    0 1 0    0
#>   8    0 0 1    0
#>   <NA> 0 0 0    0

Создано 07 августа 2019 г. с помощью пакета reprex (v0.3.0)

person N. Williams    schedule 07.08.2019