繁体   English   中英

嵌套以循环遍历R中的不同数据集

[英]Nested for loop through different sets of data in R

如何创建一个嵌套的for循环,该循环使用不同的数据集(每个数据集包含多个数据文件)作为输入,然后保存特定于变量的结果?

我编写了一个for循环,将一个国家的不同气候数据文件子集化,然后对“温度”的值求和。

数据看起来像这样,并且每天在两个国家/地区的每个地区(一个文件=一个地区)给出

Date      |Prec |Temperature
----------|-----|-----------                                          
13-01-1992| 1   |   1
14-01-1992| 0   |   1.5
15-01-1993| 0.8 |   -0.4
16-01-1993| 0   |   -2.2
17-01-1994| 0   |   -2.35
13-01-1994| 0.3 |   -2.95
14-01-1995| 1   |   -8.95
15-01-1995| 2   |   -7.25
16-01-1996| 1.5 |   -6
17-01-1996| 0   |   -8.3
13-02-1997| 1   |   -0.3
14-02-1997| 0.1 |   -0.15
15-02-1998| 0   |   -2.5
16-02-1998| 0.2 |   -3.4
17-02-1999| 0.9 |   -0.4
16-03-1999| 2.6 |   8.4
17-03-2000| 1.7 |   11
18-03-2000| 4.7 |   4.65
19-03-2001| 1   |   2.95
20-03-2001| 0.6 |   4.7
13-08-2002| 2   |   22.35
14-08-2002| 1   |   20
15-08-2003| 1.7 |   21.4
16-08-2003| 0.5 |   21.55
17-08-2004| 0.4 |   21.5
17-02-2004| 0.3 |   -0.6
18-02-2005| 0.8 |   -3.4
19-02-2005| 1.2 |   -3
20-02-2006| 0.8 |   2
21-02-2006| 6   |   1.2

现在,我希望它能覆盖两个不同国家的数据集。 每个国家/地区属于不同数量的数据文件。 我尝试了这个:

Temperature<-matrix(1995:2006,12,1)
Country_A<-c("1.csv","2.csv","3.csv")
Country_B<-c("4.csv","5.csv")
country<-c(Country_A, Country_B)
country_names<-c("Country_A "," Country_B ")

for(j in 1:2)
{for(i in country[j]) {
name <- country_names[j]  
Data<-read.csv(i, header=TRUE, sep = ",")
Data$Dates<-as.Date(Data$Date, "%d-%m-%Y")
Data95<-subset(Data, Dates>="1995-01-01")
Data$Years<- as.numeric(format(Data$Dates, "%Y"))
Temperature<-cbind(Temperature, aggregate(Data95$Column1, by= list(Data95$Years),FUN=sum))}}

像这样仅寻址文件1和2,而不是一个又一个地循环遍历一个国家。 我认为问题出在country<-c(Country_A, Country_B)

我认为数组可以是分别解决各个国家/地区的问题的解决方案,也可以保存特定国家/地区的温度结果。 不幸的是我对R很陌生,因此我不知道该如何设置。 如果有任何帮助,我将非常高兴!

Temperature<-matrix(1995:2006,12,1)

# Below are just for understanding. Country_A represents just the names of files in the A directory    
# Country_A<-c("1.csv","2.csv","3.csv")
# Country_B<-c("4.csv","5.csv")

lA=list.files(path = "countryA_pathname", pattern= ".csv")
lB=list.files(path = "countryB_pathname", pattern= ".csv")

l1A = paste0("countryA_pathname", lA)
# l1A = c("countryA_pathname/1.csv", "countryA_pathname/2.csv", "countryA_pathname/3.csv")
l1B = paste0("countryB_pathname", lB)
# l1B = c("countryB_pathname/4.csv", "countryB_pathname/5.csv")

abc <- function(path)
{
  Data = read.csv(path)
  Data$Date<-as.Date(Data$Date, "%d-%m-%Y")
  Data$Years<- as.numeric(format(Data$Date, "%Y"))
  Data95 = subset(Data , Date >="1995-01-01")
  Temperature <- ddply(Data95, "Years", function(x) sum(x$Temperature))[-1]#JUST EXTRACTS THE SUM COLUMN
  Temperature
}

LA = lapply(l1A, abc)
LB = lapply(l1B, abc)

dA = cbind(Temperature, as.data.frame(LA))
colnames(dA) <- c("Temperature", lA)
dB = cbind(Temperature, as.data.frame(LB))
colnames(dB) <- c("Temperature", lB)

希望这行得通

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM