在 R 中使用 For 循环导出多个 csv 文件?
Exporting multiple csv files using For loop in R?
这是我用过的代码,但我确实得到了所有的 csv 文件,但只有一行带有列名,没有其他数据...你能告诉我我的代码有什么问题吗?
m<-length(unique(rd_1$mall))
dataframe.list<-list()
for(i in 1:m){
dataframe.list[[i]] <- subset(rd_1, mall==i)
write.csv(dataframe.list[[i]], file =
paste0("C:/Users/yogesh/Desktop/Work/Analysis/","mall_",i,
".csv"), row.names = TRUE)
}
这是一个可重现的例子:
y <- length(unique(population$year))
dataframe.list <- list()
for (i in 1:y){
dataframe.list[[i]] <- subset(population, year == i)
write.csv(dataframe.list[[i]], file = paste0("year_", i), row.names = TRUE)
}
read.csv("year_1", row.names = 1)
# [1] country year population
# <0 rows> (or 0-length row.names)
当您 运行 循环中的第一行时:
dataframe.list[[i]] <- subset(rd_1, mall == i)
您正在 rd_1
中查找那些行,其中 mall
的值为 1
。鉴于您的第一行,我认为这不是您想要的。尝试创建一个新向量,可以将其命名为 malls
。将其设置为 unique(rd1$mall)
。然后在子集化时,使用 mall == malls[i]
,而不是 mall == i
。
malls <-unique(rd_1$mall)
m <- length(malls)
dataframe.list<-list()
for(i in 1:m){
dataframe.list[[i]] <- subset(rd_1, mall==malls[i])
write.csv(dataframe.list[[i]], file =
paste0("C:/Users/yogesh/Desktop/Work/Analysis/","mall_",i,
".csv"), row.names = TRUE)
}
我们可以使用内置数据集 population
重现您的问题和解决方案。请注意,这只是一个改进代码的旁注。当您遍历 1:m
或此处 1:y
时,您知道要遍历多少个对象。分配列表的大小。这是dataframe.list <- vector("list", y)
问题:
y <- length(unique(population$year))
dataframe.list <- vector("list", y)
for (i in 1:y){
dataframe.list[[i]] <- subset(population, year == i)
write.csv(dataframe.list[[i]], file = paste0("year_", i), row.names = TRUE)
}
read.csv("year_1")
[1] X country year population
<0 rows> (or 0-length row.names)
解决方案:
years <- unique(population$year)
y <- length(years)
dataframe.list <- vector("list", y)
for (i in 1:y){
dataframe.list[[i]] <- subset(population, year == years[i])
write.csv(dataframe.list[[i]], file = paste0("year_", i), row.names = TRUE)
}
head(read.csv("year.1", row.names = 1))
country year population
1 Afghanistan 1995 17586073
2 Albania 1995 3357858
3 Algeria 1995 29315463
4 American Samoa 1995 52874
5 Andorra 1995 63854
6 Angola 1995 12104952
这是我用过的代码,但我确实得到了所有的 csv 文件,但只有一行带有列名,没有其他数据...你能告诉我我的代码有什么问题吗?
m<-length(unique(rd_1$mall))
dataframe.list<-list()
for(i in 1:m){
dataframe.list[[i]] <- subset(rd_1, mall==i)
write.csv(dataframe.list[[i]], file =
paste0("C:/Users/yogesh/Desktop/Work/Analysis/","mall_",i,
".csv"), row.names = TRUE)
}
这是一个可重现的例子:
y <- length(unique(population$year))
dataframe.list <- list()
for (i in 1:y){
dataframe.list[[i]] <- subset(population, year == i)
write.csv(dataframe.list[[i]], file = paste0("year_", i), row.names = TRUE)
}
read.csv("year_1", row.names = 1)
# [1] country year population
# <0 rows> (or 0-length row.names)
当您 运行 循环中的第一行时:
dataframe.list[[i]] <- subset(rd_1, mall == i)
您正在 rd_1
中查找那些行,其中 mall
的值为 1
。鉴于您的第一行,我认为这不是您想要的。尝试创建一个新向量,可以将其命名为 malls
。将其设置为 unique(rd1$mall)
。然后在子集化时,使用 mall == malls[i]
,而不是 mall == i
。
malls <-unique(rd_1$mall)
m <- length(malls)
dataframe.list<-list()
for(i in 1:m){
dataframe.list[[i]] <- subset(rd_1, mall==malls[i])
write.csv(dataframe.list[[i]], file =
paste0("C:/Users/yogesh/Desktop/Work/Analysis/","mall_",i,
".csv"), row.names = TRUE)
}
我们可以使用内置数据集 population
重现您的问题和解决方案。请注意,这只是一个改进代码的旁注。当您遍历 1:m
或此处 1:y
时,您知道要遍历多少个对象。分配列表的大小。这是dataframe.list <- vector("list", y)
问题:
y <- length(unique(population$year))
dataframe.list <- vector("list", y)
for (i in 1:y){
dataframe.list[[i]] <- subset(population, year == i)
write.csv(dataframe.list[[i]], file = paste0("year_", i), row.names = TRUE)
}
read.csv("year_1")
[1] X country year population
<0 rows> (or 0-length row.names)
解决方案:
years <- unique(population$year)
y <- length(years)
dataframe.list <- vector("list", y)
for (i in 1:y){
dataframe.list[[i]] <- subset(population, year == years[i])
write.csv(dataframe.list[[i]], file = paste0("year_", i), row.names = TRUE)
}
head(read.csv("year.1", row.names = 1))
country year population
1 Afghanistan 1995 17586073
2 Albania 1995 3357858
3 Algeria 1995 29315463
4 American Samoa 1995 52874
5 Andorra 1995 63854
6 Angola 1995 12104952