我想将多个数据帧的因子列中的NA值转换为字符串" unknown"。此列在列表中存储的多个数据框中具有相同的列名称。我有一个包含两个数据帧的列表,每个数据帧包含一个具有相同名称的因子列:
a = c(1,2,3,4)
b = factor(c("Yes","No",NA,"No"))
df1 <- data.frame(a,b)
b = factor(c("Yes",NA,"No","Yes"))
df2 <- data.frame(a,b)
df_i <- list(df1,df2)
我可以自己在每个数据框中进行此转换:
df1$b = factor(df1$b, levels=c(levels(df1$b),"unknown"))
df1$b[which(is.na(df1$b))] <- "unknown"
但是,我想在列表中的所有数据框架中执行此操作,但需要注意的是我要明确使用列名称(b)而不是列索引作为相关位置列不会始终位于同一索引槽中。我试图使用lapply和ddply,但没有得到预期的结果:
df_i <- lapply(df_i, ddply, .(b), factor, levels=c(levels(.(b)),"unknown"))
这最终会替换每个数据帧的值:
>df_i
[[1]]
a b
1 NA NA
2 NA NA
3 NA NA
[[2]]
a b
1 NA NA
2 NA NA
3 NA NA
不确定从何处开始 - 有关使其适用于列表中所有数据框的任何建议吗?