我想将几个相似的变量转换成因子,但我想一次性而不是单独地这样做。最重要的是,我希望使用名为' 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文件,但我认为我不能。)先谢谢你的帮助。
答案 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])
})