使用 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])
})
我想将几个相似的变量转换为因子,但我想一次性完成而不是单独完成。最重要的是,我想使用来自名为 '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])
})