转换多个数据帧的变量性质

时间:2016-01-30 03:31:08

标签: r

我正在尝试更改多个数据框的列性质。 这是一个简单的例子,我希望有两个数据帧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"]])

2 个答案:

答案 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