如何结合 purrr::map 和 sjmisc::frq 来遍历权重?

How to combine purrr::map and sjmisc::frq to loop over weights?

我有一个包含一些目标变量(即 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.

frq 函数不接受来自数据帧外部的参数。它需要 weight 成为数据框的一部分。也许有办法,但我想不通。

这是我们可以选择 select 加权列并应用 frq 函数的一种方法。查找权重列的名称,mapselect 以及 v1v2 列,将其重命名为某个通用名称,然后在 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))