首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从标签数据创建带有标签的列

从标签数据创建带有标签的列
EN

Stack Overflow用户
提问于 2022-04-20 15:26:20
回答 3查看 234关注 0票数 2

我有一个带有标签数据的数据集,并且希望创建一个只包含标签为字符的新列。

请考虑以下示例:

代码语言:javascript
复制
value_labels <- tibble(value = 1:6, labels = paste0("value", 1:6))
df_data <- tibble(id = 1:10, var = floor(runif(10, 1, 6)))
df_data <- df_data %>% mutate(var = haven::labelled(var, labels = deframe(value_labels[2:1])))

这产生了:

代码语言:javascript
复制
# A tibble: 10 x 2
      id        var
   <int>  <dbl+lbl>
 1     1 2 [value2]
 2     2 2 [value2]
 3     3 4 [value4]
 4     4 2 [value2]
 5     5 4 [value4]
 6     6 3 [value3]
 7     7 5 [value5]
 8     8 4 [value4]
 9     9 3 [value3]
10    10 1 [value1]

现在,我想创建一个只包含标签的附加列labs (即第1行和第2行中的value2,第3行中的value4等等)。

我尝试过使用val_labs() (df_data %>% mutate(labs = val_labels(df_data$var, var))),但没有成功。有人能指出正确的方法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-04-20 15:40:22

haven::as_factor()是用来实现这一目标的。有关标记向量,请参见帮助页的示例。

代码语言:javascript
复制
df_data %>%
  mutate(labs = as_factor(var))

# A tibble: 10 × 3
      id        var  labs 
   <int>  <dbl+lbl> <fct> 
 1     1 2 [value2] value2
 2     2 5 [value5] value5
 3     3 2 [value2] value2
 4     4 5 [value5] value5
 5     5 2 [value2] value2
 6     6 4 [value4] value4
 7     7 5 [value5] value5
 8     8 4 [value4] value4
 9     9 5 [value5] value5
10    10 3 [value3] value3
票数 6
EN

Stack Overflow用户

发布于 2022-04-20 15:42:25

我们可以使用get_labels

代码语言:javascript
复制
library(dplyr)
library(sjlabelled)
df_data %>% 
   mutate(labs = get_labels(var)[var])

-output

代码语言:javascript
复制
# A tibble: 10 × 3
      id        var labs  
   <int>  <dbl+lbl> <chr> 
 1     1 3 [value3] value3
 2     2 3 [value3] value3
 3     3 2 [value2] value2
 4     4 4 [value4] value4
 5     5 5 [value5] value5
 6     6 3 [value3] value3
 7     7 3 [value3] value3
 8     8 4 [value4] value4
 9     9 1 [value1] value1
10    10 2 [value2] value2
票数 3
EN

Stack Overflow用户

发布于 2022-06-22 06:50:07

我使用labelled包也是为了同样的目的。

代码语言:javascript
复制
library(dplyr)
library(labelled)

df_data %>% 
   mutate(labs = to_factor(var))

输出:

代码语言:javascript
复制
# A tibble: 10 × 3
      id        var labs  
   <int>  <dbl+lbl> <fct> 
 1     1 5 [value5] value5
 2     2 4 [value4] value4
 3     3 5 [value5] value5
 4     4 5 [value5] value5
 5     5 2 [value2] value2
 6     6 5 [value5] value5
 7     7 2 [value2] value2
 8     8 5 [value5] value5
 9     9 5 [value5] value5
10    10 1 [value1] value1

发现转换整个df也很有用:

代码语言:javascript
复制
df_factors <- to_factor(df_data)
df_factors

输出:

代码语言:javascript
复制
# A tibble: 10 × 2
      id var   
   <int> <fct> 
 1     1 value5
 2     2 value4
 3     3 value5
 4     4 value5
 5     5 value2
 6     6 value5
 7     7 value2
 8     8 value5
 9     9 value5
10    10 value1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71942322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档