更改列表

时间:2016-09-30 18:02:25

标签: r dataframe plyr lapply

我想将多个数据帧的因子列中的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

不确定从何处开始 - 有关使其适用于列表中所有数据框的任何建议吗?

0 个答案:

没有答案