我正在学习R并且正在寻找一种方法来跨多个数据帧进行相同的数据转换,例如,重新编码每个数据帧中出现的变量,而不必每次为每个数据帧键入代码。我创建了一个数据帧列表,然后使用lapply()将它们全部转换为一个函数,但是,结果存储在一个新列表中。我希望现在能够将这些列表元素中的每一个提取到他们自己的数据框中,命名方式与原始文件相同。有谁知道怎么做?
以下是一些示例代码:
testlist<-list(FY2012First,FY2012Last)
testlist<-lapply(testlist, function(q) {
q<-mutate(q,
YearsofServiceCat =
ifelse(YearsatAgency<=2, "0-2",
ifelse(YearsatAgency>=3 & YearsatAgency<=5,"3-5",
ifelse(YearsatAgency>=6 & YearsatAgency<=8,"6-8",
ifelse(YearsatAgency>=9,"9 or greater",
"Unknown"))))))}
这给了我一个新列表,每个元素都按照我想要的方式更新,但是现在我想把这些元素放回到名为“FY2012First”和“FY2012Last”的各个数据帧中。我用它来分别做到这一点:
FY2012FirstNew<-as.data.frame(list["FY2012First"])
然而,在2012财年第一次新闻中,每个变量现在被命名为“FY2012First。(变量名称)”,我不希望这样,它们应该被命名为“(变量名称)”。
所以问题实际上是双重的;是否有更好的方法来提取这些数据帧,有没有办法在没有变量重命名的情况下完成它?
答案 0 :(得分:1)
data(iris)
data(mtcars)
iris2 = iris
mtcars2 = mtcars
testlist = list(iris2 = iris, mtcars2 = mtcars)
testlist = lapply(testlist, function(dfs){
dfs$new_col = 1
dfs
})
# datasets are unchanged
str(iris2)
str(mtcars2)
rm(list = names(testlist))
list2env(testlist, baseenv())
# datasets are updated
str(iris2)
str(mtcars2)
答案 1 :(得分:0)
可能有更好的方法,但我会用于循环:
for (i in 1:length(testlist)) {
assign(names(testlist)[i], testlist[[i]])
}