bugfix> r > 投稿

複数のcsvファイルを読み取り、11個のデータフレームのリストを取得します。次に、リスト内の各データフレームを使用して新しいテーブルを取得し、それを元の名前でcsvファイルに個別に保存します。

csvファイルを

path <- "D:/DATA/01/processdata/singlecity"
fileNames = list.files(path, pattern="*.csv$")
filePath <- sapply(fileNames, function(x){ 
paste(path,x,sep='/')}) 
dfs <- lapply(filePath, function(x){
read.csv(x, header=T)})

次に、次のようなデータフレームのリストを取得します。

EU CHINA USA

for (i in data){
   y <- data.table(i)
   y <- dplyr::filter(y, grepl('2002|2003|2004|2005|2006', V2))
   write.csv(y, "y.csv')
}

私が出力したいのはそれです:

EU_t1.csv
CHINA_t2.csv
USA_t3.csv

write.csvを使用して、元のデータフレーム名に基づいて異なるファイルを返す方法がわかりません。

回答 2 件
  • 次のことを試すことができます:

    path <- "D:/DATA/01/processdata/singlecity"
    fileNames = list.files(path, pattern="*.csv$", full.names = TRUE)
    lapply(seq_along(fileNames), function(x){
      file <- fileNames[x]
      data <- subset(read.csv(file), grepl('2002|2003|2004|2005|2006', V2))
      write.csv(data, sprintf('D:/DATA/01/processdata/singlecity/T1/%s_t%d.csv', 
                tools::file_path_sans_ext(basename(file)), x), row.names = FALSE)
    })
    
    

  • これが修正する解決策です for 共有したループ。

    dfs <- list(dataframe1, dataframe2, dataframe3)
    for (i in seq_along(dfs)) {
       y <- data.table(dfs[[i]])
       y <- dplyr::filter(y, grepl('2002|2003|2004|2005|2006', V2))
       write.csv(y, paste0("datafram_t", i, ".csv"))
    }
    
    

    これにより、要求した名前のファイルが作成されます。

    datafram_t1.csv
    datafram_t2.csv
    datafram_t3.csv
    
    

あなたの答え