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

时间:2017-06-16 19:43:11

标签: r csv lapply factors

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

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])

我的&#39; codes.csv&#39;文件如下所示(&#39;级别&#39;列在此模拟文件的第一列;&#39;标签&#39;在第二列中):

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文件,但我认为我不能。)先谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

您可以实现所需的结果,只需对lapply进行少量更改即可。我们将使用匿名函数将factor应用于每列。

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

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

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