如何结合purrr::map和sjmisc::frq来循环权重?
我有一个数据框,其中包含一些目标变量,即v1和v2,以及一些权重,即wt1、wt2、wt3。我希望生成目标变量的加权频率,但每次都使用一个权重。换句话说,我想复制频率表三次,每次复制使用不同的权重如何结合purrr::map和sjmisc::frq来循环权重?,r,purrr,weighted,R,Purrr,Weighted,我有一个数据框,其中包含一些目标变量,即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
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)
)
这是我在未加权频率旁边得到的三次输出:
Weights `.x` not found in data.
Weights `.x` not found in data.
Weights `.x` not found in data.
frq函数不接受来自数据帧外部的参数。它需要权重作为数据帧的一部分。也许有办法,但我想不出来
这里有一种方法,我们可以选择权重列并应用frq函数。找到权重列的名称,映射到它们上面,并选择它们以及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))
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))