R 中值的标签

Labels to values in R

我有一个数据框,其中所有列都有标签。例如,

unique(df$var1)
...
Labels:
 value            label
     1 21 November 2020
     2 22 November 2020
     3 23 November 2020
     4 24 November 2020

我想像处理值一样处理标签。有没有办法用列的标签替换列的值?

可以像这样创建一个最小的数据示例:

library(labelled)
df <- data.frame(
  var1 <- labelled(seq(1, 4, 1), c("21 November 2020" = 1, 
                                   "22 November 2020" = 2, 
                                   "23 November 2020" = 3,
                                   "24 November 2020" = 4)))

所需的输出将是:

unique(df$var1)
[1] 21 November 2020
[2] 22 November 2020
[3] 23 November 2020
[4] 24 November 2020

变量的head()为:

<labelled<double>[4]>
[1] 1 2 3 4

Labels:
 value            label
     1 21 November 2020
     2 22 November 2020
     3 23 November 2020
     4 24 November 2020

这是我使用包 labelleddplyr 的解决方案。

让我们先创建一些虚拟数据:

df <- data.frame(
  var = 1:10,
  var2 = labelled(seq(1, 50, 5), c("banana" = 1, "orange" = 6, "apple" = 36)))

如果您查看包含标记信息的列,您会得到以下结果:

> df$var2
<labelled<double>[10]>
 [1]  1  6 11 16 21 26 31 36 41 46

Labels:
 value  label
     1 banana
     6 orange
    36  apple

这是使用左联接将标签添加到自己的单独列的方式:

df_join <- data.frame("values" = as.numeric(val_labels(df$var2)),
                      "labels" = names(val_labels(df$var2)))
df <- df %>%
  left_join(df_join, by = c("var2" = "values"))

这是结果:

> df
   var var2 labels
1    1    1 banana
2    2    6 orange
3    3   11   <NA>
4    4   16   <NA>
5    5   21   <NA>
6    6   26   <NA>
7    7   31   <NA>
8    8   36  apple
9    9   41   <NA>
10  10   46   <NA>