r-如何在未使用的因子级别上扩展data.frame?

r-如何在未使用的因子级别上扩展data.frame?,r,dplyr,tidyr,R,Dplyr,Tidyr,我需要对所有具有公共变量的数据帧列表执行此操作。我想扩展每个数据帧,以便将公共变量扩展到所有数据帧中存在的所有级别 myList <- list(A = data.frame(A1 = rnorm(10), A2 = rnorm(10), A3 = rnorm(10), year = factor(c(2000:2009))), B = data.frame(B1 = rnorm(10), B2 =

我需要对所有具有公共变量的数据帧列表执行此操作。我想扩展每个数据帧,以便将公共变量扩展到所有数据帧中存在的所有级别

myList <- list(A = data.frame(A1 = rnorm(10), A2 = rnorm(10), A3 = rnorm(10),
                              year = factor(c(2000:2009))),
               B = data.frame(B1 = rnorm(10), B2 = rnorm(10), B3 = rnorm(10),
                              year = factor(c(2001:2010))))

masterYear <- unique(unlist(lapply(myList, function(x) levels(x$year)), use.names = F))

myList我想你不需要
x%>%

funExpand <- function(x) {levels(x$year) <- c(levels(x$year), 
                                  setdiff(masterYear, levels(x$year)))
                           vars <- names(x)[-length(names(x))]
                           complete_(x, vars, fill=list(0))}
lapply(myList, funExpand)

funExpand更新以反映OP的评论

试试这个

myList2 <- lapply(myList, 
                  function(db) {
                    db$year <- factor(as.character(db$year), levels=masterYear)
                    merge(db, data.frame(year=setdiff(masterYear, db$year)), all=T)
                  })

myList2这可能是真的。我从通过谷歌搜索发现的一个例子开始,管道tidyr::expand和dplyr::left_join-complete两者都可以。但是,我无法按照您建议的方式工作。@Antti我的解决方案是基于您使用的代码和您显示的错误。我非常感谢!然而,这并不能解决问题。@Antti正如我所说,我只是在纠正错误。根据您之前的评论,您已经得到了其他函数名。我当然不会考虑其他的函数,当代码是关于
complete
足够公平的时候。在这种情况下,用评论代替完整的答案是合适的。谢谢。我需要所有dfs中的年份列具有在所有dfs中找到的所有年份的并集,并且在该特定df中不存在时具有零值。很遗憾,你的建议不起作用。@Antti我已经根据你的评论更新了答案
myList2 <- lapply(myList, 
                  function(db) {
                    db$year <- factor(as.character(db$year), levels=masterYear)
                    merge(db, data.frame(year=setdiff(masterYear, db$year)), all=T)
                  })