使用 purrr 在 R 中标记跨多列的观察结果

Label observations across multiple columns in R using purrr

我有一个 .csv 数据集的观察标签列表,例如,1 =“是”,0 =“否”,其中第 k 列的所有观察值等于 1 的标签具有标签的“是”,但保留基础数值 1 或 0。

我想使用此列表向我的数据集迭代添加标签,最好使用 purrr 或 tidyverse。

这是我正在尝试做的事情的一个例子,但在多个列中是大规模的。

# load packages
library(tidyverse)
library(sjlabelled)

# load package data
data(efc)

# let's just start with a basic data frame
efc_twovar <- efc %>% select(e42dep, e15relat)

# create a list of labels
lab_list <- list(attr(efc$e42dep, "labels"), attr(efc$e15relat, "labels"))

# remove the labels from our data set
attr(efc_twovar, "labels") <- ""

# basic set up
set_labels(efc_twovar$e42dep, labels =  lab_list[1])

# purrr attempt
map(efc_twovar, set_labels, labels = lab_list)

上面的 purrr 尝试导致列表中第一个向量的标签应用于数据框中的两列,而不仅仅是第一列。我最终想为尽可能多的列使用大约 20 个标签向量的列表来做到这一点。

实现所需结果的一种选择是根据数据的列名称命名标签列表。这样做您可以仅使用 set_labels:

标记您的数据
library(sjlabelled)
data(efc)

efc_twovar <- efc[c("e42dep", "e15relat")]
attr(efc_twovar, "labels") <- NULL

lab_list <- list(attr(efc$e42dep, "labels"), attr(efc$e15relat, "labels"))
names(lab_list) <- names(efc_twovar)

efc_twovar <- set_labels(efc_twovar, labels =  lab_list)

lapply(efc_twovar, attributes)
#> $e42dep
#> $e42dep$label
#> [1] "elder's dependency"
#> 
#> $e42dep$labels
#>          independent   slightly dependent moderately dependent 
#>                    1                    2                    3 
#>   severely dependent 
#>                    4 
#> 
#> 
#> $e15relat
#> $e15relat$label
#> [1] "relationship to elder"
#> 
#> $e15relat$labels
#>          spouse/partner                   child                 sibling 
#>                       1                       2                       3 
#> daughter or son -in-law              ancle/aunt            nephew/niece 
#>                       4                       5                       6 
#>                  cousin          other, specify 
#>                       7                       8