我正在尝试更改多个数据框的列性质。 这是一个简单的例子,我希望有两个数据帧B_1和& B_2列从整数转换为因子。但是,我从下面的代码中得到一条错误消息。
B_1 = data.frame( x=c("01","02","03"))
B_1$x = as.integer(B_1$x)
B_2 = data.frame( x=c(1,2,3,4,5,6,7) )
B_2$x = as.integer(B_2$x)
for (i in 1:2)
get(paste0("B_",i))[["x"]] <- as.factor(get(paste0("B_",i))[["x"]])
答案 0 :(得分:0)
一种可能的解决方案是首先制作一个包含所有B_X数据帧的列表,然后将它们转换为因子。像这样:
B_1 = data.frame( x=c("01","02","03"))
B_2 = data.frame( x=c(1,2,3,4,5,6,7) )
li = list()
for (i in 1:2) {li = c(li, get(paste0("B_",i)))}
for (k in 1:2) {li[[k]] = as.factor(li[[k]])}
这将返回:
> li
$x
[1] 01 02 03
Levels: 01 02 03
$x
[1] 1 2 3 4 5 6 7
Levels: 1 2 3 4 5 6 7
我希望这能解决你的问题。
答案 1 :(得分:0)
我们可以使用mget
获取list
中的所有数据集,然后使用mutate_each
将列转换为factor
(如果有多列)
library(dplyr)
lst <- lapply(mget(paste('B', 1:2, sep="_")),
function(x) mutate_each(x, funs(factor(.))) )
str(lst)
#List of 2
# $ B_1:'data.frame': 3 obs. of 1 variable:
# ..$ x: Factor w/ 3 levels "01","02","03": 1 2 3
# $ B_2:'data.frame': 7 obs. of 1 variable:
# ..$ x: Factor w/ 7 levels "1","2","3","4",..: 1 2 3 4 5 6 7
最好将数据集保存在list
。