2017-10-19 51 views
1

我有多個csv文件,我已經讀入R.現在我想將所有這些文件追加到一個文件中。我嘗試了一些東西,但得到不同的錯誤。任何人都可以幫助我嗎?使用R將多個csv文件追加到一個文件中

TRY 1:

mydata <- rbind(x1,x2,x3,x4,x5,x6,x7,x8) 

WHERE X1,X2 .... X8是CSV文件,我讀入R,錯誤,我得到的是

錯誤1:在[<-.factor*tmp*,RI ,值= C(NA,NA,NA,NA,NA,NA,NA,: 無效因子水平,NA產生

TRY 2:然後我嘗試這個以另一種方式:

mydata1<- c(x1,x2,x3,x4,x5,x6,x7,x8) 
> mydata2 <- do.call('rbind',lapply(mydata1,read.table,header=T)) 

錯誤2:FUN(X [我],...): 「文件」必須是字符串或聯結

任何人都可以請幫我知道什麼是應該做的正確方法這個?

+0

是否所有的文件具有相同的順序相同的列,並有相同數量的列?如果不相等,則不同的解決方案。 –

+1

@Sowmta S. Manian是所有列都具有相同的順序,並且具有相同的列數只有不同的行數 – sim

回答

0

樣品CSV文件

注意
CSV文件,在這裏合併有
- 等於列數
- 相同的列名
- 列
的順序相同 - 數行可以不同

1st csv文件abc.csv

A,B,C,D 
1,2,3,4 
2,3,4,5 
3,4,5,6 
1,1,1,1 
2,2,2,2 
44,44,44,44 
4,4,4,4 
4,4,4,4 
33,33,33,33 
11,1,11,1 

第二csv文件pqr.csv

A,B,C,D 
1,2,3,40 
2,3,4,50 
3,4,50,60 
4,4,4,4 
5,5,5,5 
6,6,6,6 

CSV列表文件名的文件

注意
下面E:/MergeCSV/路徑具有隻是將文件合併。沒有其他的csv文件。因此,在這個路徑中,只有兩個CSV文件,abc.csvpqr.csv

## List filenames to be merged. 
filenames <- list.files(path="E:/MergeCSV/",pattern="*.csv") 

## Print filenames to be merged 
print(filenames) 
## [1] "abc.csv" "pqr.csv" 

完整路徑,CSV文件

## Full path to csv filenames 
fullpath=file.path("E:/MergeCSV",filenames) 

## Print Full Path to the files 
print(fullpath) 
## [1] "E:/MergeCSV/abc.csv" "E:/MergeCSV/pqr.csv" 

MERGE CSV文件

## Merge listed files from the path above 
dataset <- do.call("rbind",lapply(filenames,FUN=function(files){ read.csv(files)})) 

## Print the merged csv dataset, if its large use `head()` function to get glimpse of merged dataset 
dataset 
#  A B C D 
# 1 1 2 3 4 
# 2 2 3 4 5 
# 3 3 4 5 6 
# 4 1 1 1 1 
# 5 2 2 2 2 
# 6 44 44 44 44 
# 7 4 4 4 4 
# 8 4 4 4 4 
# 9 33 33 33 33 
# 10 11 1 11 1 
# 11 1 2 3 40 
# 12 2 3 4 50 
# 13 3 4 50 60 
# 14 4 4 4 4 
# 15 5 5 5 5 
# 16 6 6 6 6 

head(dataset) 
# A B C D 
# 1 1 2 3 4 
# 2 2 3 4 5 
# 3 3 4 5 6 
# 4 1 1 1 1 
# 5 2 2 2 2 
# 6 44 44 44 44 

## Print dimension of merged dataset 
dim(dataset) 
## [1] 16 4 
+0

它仍然給我錯誤文件名<-list.files(path =「c:\\ users \\ yz \\ Desktop \\ test \\「,pattern =」。* csv「) > fullpath = file.path(」c:\\ users \\ yz \\ Desktop \\ test「,文件名) > datasetsim < - do。 call(「rbind」,lapply(文件名,FUN =函數(文件){read.csv(文件)})))文件錯誤(文件「rt」):無法打開連接另外:警告消息: 在文件(文件「rt」): 無法打開文件'data1.csv':沒有這樣的文件或目錄 – sim

+0

嘗試在list.files()中放入「* .csv」或「csv」而不是「。* csv」模式參數值。 –

+0

如果不工作,我會刪除它,因爲我還沒有測試過它。需要安裝R來測試。如果有幫助,那麼很好。 –

1

你可以使用lapply()和do.call()的組合。

## cd to the csv directory 
setwd("mycsvs") 

## read in csvs 
csvList <- lapply(list.files("./"), read.csv, stringsAsFactors = F) 

## bind them all with do.call 
csv <- do.call(csvList, rbind) 

您也可以使用從data.tablefread()功能和rbindlist()而不是爲性能的提升。

0

如何按行從一個文件夾中,在一次和綁定導入所有文件(例如,爲每個文件相同的格式。)

library(tidyverse) 

list.files(path = "location_of/data/folder_you_want/", 
       pattern="*.csv", 
       full.names = T) %>% 
    map_df(~read_csv(.)) 

如果要排除再

文件
list.files(path = "location_of/data/folder_you_want/", 
       pattern="*.csv", 
       full.names = T) %>% 
    .[ !grepl("data/folder/name_of_file_to_remove.csv", .) ] %>% 
    map_df(~read_csv(.))