我有个循环相关的问题。我有以下文件夹结构(摘录):
├───Y2017
│ UDB_cSK17D.csv
│ UDB_cSK17H.csv
│ UDB_cSK17P.csv
│ UDB_cSK17R.csv
│ UDB_cUK17D.csv
│ UDB_cUK17H.csv
│ UDB_cUK17P.csv
│ UDB_cUK17R.csv
└───Y2018
│ UDB_cSK18D.csv
│ UDB_cSK18H.csv
│ UDB_cSK18P.csv
│ UDB_cSK18R.csv
│ UDB_cUK18D.csv
│ UDB_cUK18H.csv
│ UDB_cUK18P.csv
│ UDB_cUK18R.csv所有的文件都有相同的结构。我想循环遍历它们,并从选定的列数中提取数据。文件名也都有相同的结构。所有档案都有:
我想要构造一个循环来迭代文件名。对于一个国家来说,这样做会是这样的:
library(data.table)
ldf<-list()
country_id<-"UK(.*)"
db_id<-"P.csv$"
listcsv<-dir(pattern = paste0(country_id,db_id), recursive = T, full.names = T)
for (k in 1:length(listcsv)){
ldf[[k]]<-fread(listcsv[k],select = c("PB010","PB020"))
}
uk_data<-bind_rows(as.data.frame(do.call(rbind,ldf[])))此代码根据我给出的国家标识符提取我需要的所有列(在本例中为UK)。由于我的数据集中有许多国家,所以我希望有一个代码来迭代和更新国家标识符。我尝试了以下几点:
ldf_new<-list()
countries <-c("SK", "UK")
for (i in 1:length(countries)) {
currcty1 <- countries[i]
listcsv<-dir(pattern = paste0(currcty1,"(.*)",db_id), recursive = T, full.names = T)
# print(listcsv)
ldf_new<-fread(listcsv[i],select = c("PB010","PB020"))
}这里发生的是,我只得到变量ldf_new中最后一次迭代的结果(在本例中是UK )。有什么办法我可以得到的结果SK和英国。
事先非常感谢!
发布于 2021-02-01 10:05:14
更改循环的最后一行,以便向列表中添加一个新元素,就可以做到这一点:
ldf_new<-list()
countries <-c("SK", "UK")
for (i in 1:length(countries)) {
currcty1 <- countries[i]
listcsv<-dir(pattern = paste0(currcty1,"(.*)",db_id), recursive = T, full.names = T)
# print(listcsv)
ldf_new<-c(ldf_new, fread(listcsv[i],select = c("PB010","PB020")))
}https://stackoverflow.com/questions/65990427
复制相似问题