假设我有以下tibble由tibble
和haven
包制作:
library(tibble)
library(haven)
# Create numerical values
values <- c(1:5)
# Combine values and colors into a named vector
color_choices <- setNames(values, c("Don't know", "Red", "Blue", "Green", "Yellow"))
name_choices <- setNames(values, c("Don't know", "John", "Paul", "Ringo", "George"))
# Create a tibble with the labelled column
data <- tibble(respondent_ID = seq(1:10),
colour_choice = labelled(sample(1:5, 10, replace = TRUE), labels = color_choices),
name_choice = labelled(sample(1:5, 10, replace = TRUE), labels = name_choices))
data
现在我想改变一些变量的haven标签.具体地说,我只想把value = 1
的标签从"Don't know"
改为"Not sure"
,但我想跨多个变量这样做.
这就达到了我想要的colour_choice
变量的结果:
data_replaced <- data
color_choices2 <- color_choices
names(color_choices2)[1] <- "Not sure"
val_labels(data_replaced$colour_choice) <- color_choices2
然而,由于两个原因,这是繁琐的;首先,即使是一个变量,它也是低效的,因为它涉及到为变量中的所有标签创建一个新的命名向量,而只有一个标签需要替换.[val_labels(data_replaced$colour_choice) <- c("Not sure" = 1)
导致其他标签被删除].第二,它绝对没有可扩展性.
我一直在try 一个dhrr方法(这将是更好的反正)使用memisc::relabel
功能,但不断击中墙壁,我想知道是否有人可以提出一个建议?这就是我在的位置:
data_replaced <- data %>%
mutate_at(vars(colour_choice, name_choice), ~ memisc::relabel(., "Don't know" = "Not sure"))