更改多个数据框架中变量的因子级别

时间:2018-02-07 16:38:40

标签: r dataframe data.table

我有4个数据集,我想获得每个数据集的每个组的百分比。使用prop.table(table(df1$group))更改df2$group等等,这一切都很好,但我想在我的表格上添加标签。因此,我已将列转换为factor并分配了相应的levels,但这涉及为每个数据集分配levels

我已尝试使用lapply,但我最终使用NA s作为因素levels

以下是一些数据

df1 <- data.table(id=(1:100), group= sample(5,100, replace=T))
df2 <- data.table(id=(1:100), group= sample(5,100, replace=T))
df3 <- data.table(id=(1:100), group= sample(5,100, replace=T))
df4 <- data.table(id=(1:100), group= sample(5,100, replace=T))

df1$group <- as.factor(df1$group)
df2$group <- as.factor(df2$group)
df3$group <- as.factor(df3$group)
df4$group <- as.factor(df4$group)

我的尝试:

df <- list(df1,df2,df3,df4)
df <- lapply(df,function(x) x[,group:=factor(group, levels = c("A","B","C","D","E"))])

但这会返回levels的更改,但会生成NAs

数据全部在data.tables,我对factorsdata.table感兴趣。我也有兴趣在多个class中更改多个变量的data.tables,但为了简单起见,这可能是另一个问题。

1 个答案:

答案 0 :(得分:1)

我们需要指定与原始数据中存在的labels对应的levels

lapply(df, function(x) x[,  group := factor(group, levels = 1:5, labels = LETTERS[1:5])])