0

您好,我从 R 中的 SPSS 导入了一个数据集,该数据集有标签,我想将值标签用作字符串值。有没有办法做到这一点?

head(dataset$A7B1)
<Labelled double>: A7b1. Cantón de San José en que reside
[1] NA NA NA 2  8 NA 4 NA 5

Labels:
 value         label
     1      SAN JOSÉ
     2        ESCAZÚ
     3  DESAMPARADOS
     4      PURISCAL
     5       TARRAZÚ
     6        ASERRÍ
     7          MORA
     8    GOICOECHEA
     9     SANTA ANA
    10    ALAJUELITA
    11      CORONADO
    12        ACOSTA
    13         TIBAS
    14       MORAVIA
    15 MONTES DE OCA
    16    TURRUBARES
    17          DOTA
    18    CURRIDABAT
    19 PÉREZ ZELEDÓN
    20   LEÓN CORTÉS

我需要根据值标签将每个双标签值变成字符串值。

glimpse(dataset)
Rows: 283
Columns: 9
$ A7A  <dbl+lbl> 2, 8, 3, 3, 1, 2, 4, 4, 4, 2, 2, 4, 3, 4, 2, 3, 1, 2, 2, 6, 1, 1, 2, 2, 1, 2, 3, 1, 2, 1, 1, 4, 3, 1, 2, 2, 1, 1, 4, ...
$ A7B1 <dbl+lbl> NA, NA, NA, NA, 8, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 3, NA, NA, NA, 1, 11, NA, NA, 8, NA, NA, 3, NA, 14, 1,...
$ A7B2 <dbl+lbl> 1, NA, NA, NA, NA, 1, NA, NA, NA, 1, 1, NA, NA, NA, 1, NA, NA, 6, 2, NA, NA, NA, 1, 10, NA, 1, NA, NA, 1, NA, NA, NA,...
$ A7B3 <dbl+lbl> NA, NA, 1, 7, NA, NA, NA, NA, NA, NA, NA, NA, 3, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA...
$ A7B4 <dbl+lbl> NA, NA, NA, NA, NA, NA, 2, 1, 1, NA, NA, 9, NA, 7, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
$ A7B5 <dbl+lbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N...
$ A7B6 <dbl+lbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 2, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
$ A7B7 <dbl+lbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N...
$ A7B8 <dbl+lbl> NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA..


 dput(head(dataset$A7A))
structure(c(2, 8, 3, 3, 1, 2), label = "A7a. Provincia de residencia", labels = c(`San Jose` = 1,     Alajuela = 2, Cartago = 3, Heredia = 4, Guanacaste = 5, Puntarenas = 6, 
Limon = 7, Extrenjero = 8), class = "haven_labelled")
4

1 回答 1

1

我通常haven在读取 SPSS 数据时使用,并为此提供了一个辅助函数。希望这会有所帮助——如果没有,请在您的问题中提供更多信息:)

library(haven)

swap_labels <- function(x, keep_original = TRUE) {
  
  labels <- attr(x, "labels")
  new_vec <- names(labels)[match(x, labels)]
  
  if(keep_original) {
    haven::labelled_spss(new_vec, setNames(names(labels), labels))
  } else {
    new_vec
  }
  
}

# Reproducible example
test_vec <- labelled_spss(1:3, labels = setNames(1:3, letters[1:3]))

> test_vec
<labelled_spss<integer>[3]>
[1] 1 2 3

Labels:
 value label
     1     a
     2     b
     3     c

> swap_labels(test_vec)
<labelled_spss<character>[3]>
[1] a b c

Labels:
 value label
     a     1
     b     2
     c     3
于 2020-08-24T17:48:23.040 回答