使用 R 中 .csv 的信息将多个变量转换为因子

converting multiple variables into factors using information from .csv in R

我想将几个相似的变量转换为因子,但我想一次性完成而不是单独完成。最重要的是,我想使用来自名为 'codes.csv' 的外部 .csv 文件的信息来实现此目的,我在其中列出了与变量有关的所有相关信息,例如'levels' 和 'labels.' 我的数据如下所示:

set.seed(1234)

my_data <- data.frame(citation_1 = sample(c(1:7), 10, replace = TRUE),
                      citation_2 = sample(c(1:7), 10, replace = TRUE),
                      citation_3 = sample(c(1:7), 10, replace = TRUE))

my_data

当然,我可以对每个变量执行以下操作...

codes <- read.csv("codes.csv", header = FALSE)

my_data$citation_1 <- factor(my_data$citation_1,
                             levels = codes[, 1],
                             labels = codes[, 2])

但必须有更有效的方法;我尝试了以下代码及其变体:

citations <- c("citation_1", "citation_2", "citation_3")

my_data[citations] <- lapply(my_data[citations], factor,
                             levels = codes[, 1],
                             labels = codes[, 2])

我的 'codes.csv' 文件如下所示('levels' 列在该模拟文件的第一列;'labels' 列在第二列):

1 dismissed
2 acquitted by court
3 acquitted by jury
4 convicted/plea of guilty
5 convicted/plea of nolo contendere
6 convicted by court
7 convicted by jury

(我会附上上面的 .csv 文件,但我想我做不到。)在此先感谢您的帮助。

您可以通过对 lapply 进行小的更改来实现您想要的结果。我们将使用匿名函数将 factor 应用于每一列。

  my_data[citations] <- lapply(my_data[citations], function(each_column){
    factor(each_column,
           levels = codes[, 1],
           labels = codes[, 2])
  })

如果您愿意,可以直接阅读 lapply 中的 codes.csv

  my_data[citations] <- lapply(my_data, function(each_column) {
    factor(each_column,
           levels = read.csv("codes.csv")[, 1],
           labels = read.csv("codes.csv")[, 2])
  })