如何结合 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
函数的一种方法。查找权重列的名称,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))
我有一个包含一些目标变量(即 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
函数的一种方法。查找权重列的名称,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))