我有一个带有标签变量的数据集(从Stata导入),并且想更改多个变量的label属性(小写)。我知道如何逐列执行此操作,但想将赋值嵌套在函数中以使用lapply(或者从tidyverse中选择mutate_at)。
library(tidyverse)
gender <- labelled(c(0, 0, 1, 0), labels = c(MALE = 0, FEMALE = 1))
group <- labelled(c(1, 2, 3, 1), labels = c(TREATMENT_FIRST = 1, TREATMENT_SECOND = 2, CONTROL = 3))
result <- rnorm(4)
df <- tibble(gender, group, result)
names(attr(df$gender, "labels"))
我想将性别和组的标签属性更改为小写字母。
names(attr(df$gender, "labels")) <- tolower(names(attr(df$gender, "labels")))
这可行,但是在我的真实数据集中,我有很多变量,因此我想在函数内部执行此操作。我以为我可以定义一个如下所示的函数,然后使用lapply,但这会返回标签,而不是将标签分配给属性。
f1 <- function(x) {
names(attr(x, "labels")) <- tolower(names(attr(x$y, "labels")))
}
cols <- c("gender", "group")
df[cols] <- lapply(df[cols], f1)
df