R-不好-要将数据帧从列表中删除吗?

时间:2020-02-05 12:49:49

标签: r lapply

我和这个人有同样的问题:returning from list to data.frame after lapply

尽管他们解决了他的特定问题,却没有人真正回答过他最初提出的有关如何从列表中获取数据帧的问题。

我有一个数据帧列表:

DoThis = function(x){
  filter(x, year >=2015 & year <=2018) %>% 
  replace(is.na(.), 0) %>%
  adorn_totals("row")

}

我想对它们全部进行过滤/替换。

所以我的功能是:

a = lapply(dfPreList, DoThis) 

我用lapply对它们全部运行该函数,如下所示:

(a)

正如另一篇文章所述,这些数据帧现在被卡在列表for loop中,我需要一个dfPreList = list(yearlyFunding, yearlyPubs, yearlyAuthors) dfPreListstr= list('yearlyFunding', 'yearlyPubs', 'yearlyAuthors') DoThis = function(x){ filter(x, year >=2015 & year <=2018) %>% replace(is.na(.), 0) %>% adorn_totals("row") } a = lapply(dfPreList, DoThis) for( i in seq_along(dfPreList)){ assign(dfPreListstr[[i]], as.data.frame(a[i])) } 才能将它们取出来,但这根本不是正确的方法。 / p>

这是我目前将功能应用于数据框然后将其取出的工作方法:

for loops

有没有一种方法,而不必依赖lapply和数据帧的字符串名称?即与Popup Modal一线吗?

非常感谢您的帮助

2 个答案:

答案 0 :(得分:2)

您可以为列表分配名称,然后使用list2env

dfPreList = list(yearlyFunding, yearlyPubs, yearlyAuthors)
a = lapply(dfPreList, DoThis) 
names(a) <- c('yearlyFunding', 'yearlyPubs', 'yearlyAuthors')
list2env(a, .GlobalEnv)

答案 1 :(得分:1)

另一种方法是unlist列表,然后将内容转换为数据框。

dfPreList = list(yearlyFunding, yearlyPubs, yearlyAuthors)
a = lapply(dfPreList, DoThis)
names(a) <- c('yearlyFunding', 'yearlyPubs', 'yearlyAuthors')

yearlyFunding <- data.frame(matrix(unlist(a$yearlyFunding), nrow= nrow(yearlyFunding), ncol= ncol(yearlyFunding)))
yearlyPubs <- data.frame(matrix(unlist(a$yearlyPubs), nrow= nrow(yearlyPubs), ncol= ncol(yearlyPubs)))
yearlyAuthors <- data.frame(matrix(unlist(a$yearlyAuthors), nrow= nrow(yearlyAuthors), ncol= ncol(yearlyAuthors)))

由于unlist函数返回向量,因此我们首先生成矩阵,然后将其转换为数据帧。