我有以下数据框,其中包含有关不同状态的信息。
long=c(-106.61291,-106.61291,-106.61291,-81.97224,-81.97224,-81.97224,-84.4277,-84.4277,-84.4277)
lat=c(35.04333,35.04333,35.04333,33.37378,33.37378,33.37378,33.64073,33.64073,33.64073)
city=c("Albuquerque","Albuquerque","Albuquerque","Augusta","Augusta","Augusta","Atlanta","Atlanta","Atlanta")
date=c("2017-08-22","2017-08-23","2017-09-24","2017-09-28","2017-10-24","2017-09-22","2017-11-12","2017-010-14","2017-09-03")
value=c(12,10.8,18.3,12.4,43,21,12,32.1,14)
df<-data.frame(long,lat,city,date,value)
问题:我想在各个csv中写下每个城市信息。每个csv应该看起来 如下。 最终输出:
Albuquerque.csv
long lat city date value
1 -106.6129 35.04333 Albuquerque 2017-08-22 12.0
2 -106.6129 35.04333 Albuquerque 2017-08-23 10.8
3 -106.6129 35.04333 Albuquerque 2017-09-24 18.3
Augusta.csv
long lat city date value
1 -81.97224 33.37378 Augusta 2017-09-28 12.4
2 -81.97224 33.37378 Augusta 2017-10-24 43.0
3 -81.97224 33.37378 Augusta 2017-09-22 21.0
Atlanta.csv
long lat city date value
1 -84.4277 33.64073 Atlanta 2017-11-12 12.0
2 -84.4277 33.64073 Atlanta 2017-010-14 32.1
3 -84.4277 33.64073 Atlanta 2017-09-03 14.0
提前致谢!
答案 0 :(得分:1)
split_df = split(df, list(df$city))
for (city in names(split_df)) {
write.csv(split_df[[[city]], paste0(city, ".csv"))
}
答案 1 :(得分:1)
long=c(-106.61291,-106.61291,-106.61291,-81.97224,-81.97224,-81.97224,-84.4277,-84.4277,-84.4277)
lat=c(35.04333,35.04333,35.04333,33.37378,33.37378,33.37378,33.64073,33.64073,33.64073)
city=c("Albuquerque","Albuquerque","Albuquerque","Augusta","Augusta","Augusta","Atlanta","Atlanta","Atlanta")
date=c("2017-08-22","2017-08-23","2017-09-24","2017-09-28","2017-10-24","2017-09-22","2017-11-12","2017-010-14","2017-09-03")
value=c(12,10.8,18.3,12.4,43,21,12,32.1,14)
df<-data.frame(long,lat,city,date,value)
dflist <- split(df , f = df$city)
sapply(names(dflist),
function (x) write.csv(dflist[[x]], file=paste(x, "csv", sep=".") ) )
答案 2 :(得分:0)
有几种不同的方法可以做到这一点,但是一次快速地为所有城市执行此操作的方法是利用基础R中的apply
函数族 - 特别是lapply
。
long=c(-106.61291,-106.61291,-106.61291,-81.97224,-81.97224,-81.97224,-84.4277,-84.4277,-84.4277)
lat=c(35.04333,35.04333,35.04333,33.37378,33.37378,33.37378,33.64073,33.64073,33.64073)
city=c("Albuquerque","Albuquerque","Albuquerque","Augusta","Augusta","Augusta","Atlanta","Atlanta","Atlanta")
date=c("2017-08-22","2017-08-23","2017-09-24","2017-09-28","2017-10-24","2017-09-22","2017-11-12","2017-010-14","2017-09-03")
value=c(12,10.8,18.3,12.4,43,21,12,32.1,14)
df<-data.frame(long,lat,city,date,value)
# create a convenience function to split your data and export to csv
split_into_csv <- function(x) {
tmp <- df[df$city == x,]
write.csv(tmp, file = paste0(x,".csv"))}
# Apply split_into_csv over elements of list with lapply
lapply(levels(df$city), split_into_csv)
# Check output in director
dir()
[1] "Albuquerque.csv" "Atlanta.csv" "Augusta.csv"
答案 3 :(得分:-1)
您可以使用base R或dplyr包来执行此操作。
dplyr方式:
dplyr::filter(df, city == 'Albuquerque') %>% write.csv(file = 'Albuquerque.csv', row.names = FALSE)
dplyr::filter(df, city == 'Augusta') %>% write.csv(file = 'Augusta.csv', row.names = FALSE)
dplyr::filter(df, city == 'Atlanta') %>% write.csv(file = 'Atlanta.csv', row.names = FALSE)
基地R:
write.csv(df[df$city == 'Albuquerque', ], file = 'Albuquerque.csv', row.names = FALSE)
write.csv(df[df$city == 'Augusta', ], file = 'Augusta.csv', row.names = FALSE)
write.csv(df[df$city == 'Atlanta', ], file = 'Atlanta.csv', row.names = FALSE)
如果你开始获得更多城市,你可以使用for循环。
for (city in c('Albuquerque', 'Augusta', 'Atlanta')) {
write.csv(df[df$city == city, ], file = paste0(city, '.csv'))
}