【问题标题】:Assign value labels as string values in R在 R 中将值标签分配为字符串值
【发布时间】:2020-12-13 09:08:28
【问题描述】:

您好,我从 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")

【问题讨论】:

  • 你用什么读入数据?你能提供一个可重现的例子吗?您想保留原始值作为属性还是只希望标签成为值?
  • 您好,谢谢。我用 Haven 包阅读它,但我也可以用 sjlabelled 包来阅读它。是的,我真正想要的是标签变成字符串值

标签: r label spss r-haven


【解决方案1】:

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

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

【讨论】:

  • 您好 Andrew,感谢您的帮助,但没有成功。它给了我这个错误: Error: labels must be unique 。这就是数据集的样子。我只显示一列,但有更多带有双标签值的列。我需要对所有人都一样。 > head(data set$A7A) : A7a.省。 [1] 2 8 3 3 1 2 7 1 1 1 标签:价值标签 1 San Jose 2 Alajuela 3 Cartago 4 Heredia 5 Guanacaste 6 Puntarenas 7 Limon 8 Extrenjero
  • @jruizri,您能否发布dput(head(dataset$A7A)) 的结果或可以重现错误的示例?
  • 我用这个结果编辑了问题。 dput(head(dataset$A7A)) structure(c(2, 8, 3, 3, 1, 2), label = "A7a. Provincia de residentcia Permanente.", labels = c(San Jose = 1, Alajuela = 2, Cartago = 3, Heredia = 4, Guanacaste = 5, Puntarenas = 6, Limon = 7, Extrenjero = 8), class= "haven_labelled")
  • 感谢您发布dput()!现在应该可以走了。另外,听起来你想要keep_original = FALSE
  • 没问题!你也可以dataset[] &lt;- lapply(dataset, swap_labels)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-08
  • 1970-01-01
  • 2018-08-24
  • 1970-01-01
  • 2015-07-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多