如何在R中过滤带标签的tibble?解决过滤残留值问题
问题解决:过滤后移除未使用的标签值
你用s2取值2和3过滤tibble得到df2后,s2的标签里依然保留了未出现的取值1(Yes),这是因为labelled包默认会保留变量的所有原始值标签,过滤操作不会自动清理未使用的标签。
解决方法1:自动清理未使用标签
使用labelled包的drop_unused_value_labels()函数,过滤后直接移除数据中不存在的取值对应的标签:
library(dplyr) library(labelled) df <- tibble(s1 = c("M", "M", "F", "M", "M", "F"), s2 = c(1, 1, 2, 1, 1, 3)) %>% set_variable_labels(s1 = "Sex", s2 = "Question") %>% set_value_labels(s1 = c(Male = "M", Female = "F"), s2 = c(Yes = 1, No = 2, DK =3)) # 过滤后清理未使用标签 df2 <- df %>% filter(s2 %in% c(2, 3)) %>% # s2是数值型变量,直接用数值匹配更规范 drop_unused_value_labels() df2$s2 #> <labelled<double>[2]>: Question #> [1] 2 3 #> #> Labels: #> value label #> 2 No #> 3 DK
解决方法2:手动重新设置标签
如果需要自定义标签内容,可以手动指定当前数据中存在的取值对应的标签:
df2 <- df %>% filter(s2 %in% c(2, 3)) %>% set_value_labels(s2 = c(No = 2, DK = 3)) df2$s2 #> <labelled<double>[2]>: Question #> [1] 2 3 #> #> Labels: #> value label #> 2 No #> 3 DK
内容的提问来源于stack exchange,提问作者sbac
相关产品推荐
相关产品推荐

