在R中应用lapply更改多列的属性

时间:2019-07-09 16:17:34

标签: r function dplyr environment-variables

我有一个带有标签变量的数据集(从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

0 个答案:

没有答案