1

我正在使用变量列表在 R 中下载和创建数据框。我希望能够使用此列表来更改每个数据框中的不同列,但是我无法使用变量列表调用特定列。

countries= c("USA","CHN")

for (i in 1:length(countries)){
    download.file(url[i],savedata[i])
    assign(countries[i],xmlToDataFrame(savedata[i]))
}

现在我有如下所示的数据框:

head(USA)
        indicator       country date          value decimal
1 GDP (current US$) United States 2012 15684800000000       0
2 GDP (current US$) United States 2011 14991300000000       0
3 GDP (current US$) United States 2010 14419400000000       0
4 GDP (current US$) United States 2009 13898300000000       0
5 GDP (current US$) United States 2008 14219300000000       0
6 GDP (current US$) United States 2007 13961800000000       0

而且我想进行一些更改,例如使用as.date()函数格式化日期列,或更改值列的单位,但我希望能够对两个数据框(或任意数字案例我增加国家的长度。

但是,每当我尝试这样做时,我似乎可以使用国家变量中的国家列表来“进入”每个数据框。我最初的猜测是把这样的东西放在一个循环中:

assign(paste(countries[i],"date",sep="$"),
    as.date(get(paste(countries[i],"date",sep="$")))

特别是,get(paste(countries[i]))如果我不尝试获取特定列的日期,以及如何paste(countries[i],"date",sep="$")打印正确的名称,我对如何工作感到困惑,但我似乎无法获得我想要操作的一列。

此外,我意识到循环不是执行此操作的理想方式,但是我在应用函数方面遇到了同样的问题,尽管由于我缺乏经验,我可能在使用它们时遇到了麻烦。非常感谢有关如何循环执行或不循环执行的建议。Super R新手在这里,只是在努力学习。另外,如果您在其他地方对此有明确的解释/答案,我会很感激您指出我的方向。

4

1 回答 1

3

如果你使用列表会容易得多。从一个空的开始:

mylist = list()

然后改变这个:

assign(countries[i],xmlToDataFrame(savedata[i]))

对此:

mylist[[i]] <- xmlToDataFrame(savedata[i])

然后制作一个进行格式化的函数,例如:

f <- function(df){
    within(df, date <- as.date(date))
}

并用于lapply将其应用于所有数据帧:

mylist2 <- lapply(mylist, f)

如果要按名称访问数据框,请使用:

names(mylist2) <- countries

并测试:

mylist2[["USA"]]
于 2013-08-25T23:32:32.343 回答