Как объединить purrr :: map и sjmisc :: frq для циклического перебора весов? - PullRequest
0 голосов
/ 27 июня 2019

У меня есть фрейм данных с некоторыми целевыми переменными (т.е. v1 и v2) и некоторыми весами (то есть wt1, wt2, wt3).Я хочу производить взвешенные частоты целевых переменных, но каждый раз используя вес.Другими словами, я хочу повторить таблицы частот три раза, используя разные веса в каждой репликации.

library(tidyverse)
library(sjmisc)

 df <- tibble(v1 = rbinom(10, 1, .5), 
       v2 = rbinom(10, 1, .5), 
       wt_1 = runif(10, 0, 2), 
       wt_2 = runif(10, 0, 2), 
       wt_3 = runif(10, 0, 2)
       )

Я пробовал разные подходы, такие как:

df %>% 
  select(starts_with("wt_")) %>% 
  map(~frq(select(df, v1, v2), weights = .x))

Это вывод, который я получаю вместе с невзвешенными частотами (три раза):

Weights `.x` not found in data.
Weights `.x` not found in data.
Weights `.x` not found in data.

1 Ответ

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

frq функция не будет принимать аргументы извне кадра данных. Он должен быть weight, чтобы быть частью фрейма данных. Может быть, есть способ, но я не мог понять это.

Вот один из способов, которым мы можем альтернативно выбрать весовые столбцы и применить функцию frq. Найдите имена столбцов веса, map над ними и select их альтернативно вместе со столбцами v1 и v2, переименуйте его в какое-нибудь общее имя и затем используйте это имя в frq для назначения весов.

library(tidyverse)
library(sjmisc)

weight_names <- grep("wt_", names(df), value = TRUE)

map(weight_names, ~df %>% 
                   select(v1, v2, .x) %>% 
                   rename_at(3, ~"weight") %>%
                   frq(v1, v2, weights = weight))
...