2017-07-19 12 views
0

私はRにインポートする必要がある100以上のテキストファイルを持っています。それらのうちのいくつかは異なるヘッダーを持っています。 1つのデータフレームにマージするためにdo.callを使用してそれらを結合する前に、すべて同じヘッダを割り当てることができます。しかし、その前に、各ファイルのファイル名を新しいカラムとして保存する必要があります。私は手動で新しい列を作成するにはファイルが多すぎます。ありがとうRで異なるヘッダーを持つ複数の.txtファイルを読み込み、各ファイルの列としてファイル名を保存します。

答えて

0

私は再現可能な例を作りました。 へスキップの再生可能な例をスキップしたい場合は、としてください。 csvファイルに書き込むデータがあります。 temp0は2列があり、temp1は、ファイルに書き出すまでのデータ

library(tidyverse) 

temp0 <- mtcars %>% head(.,5) %>% select(mpg,cyl) 

        mpg cyl 
Mazda RX4   21.0 6 
Mazda RX4 Wag  21.0 6 
Datsun 710  22.8 4 
Hornet 4 Drive 21.4 6 
Hornet Sportabout 18.7 8 

temp1 <- mtcars %>% head(.,5) %>% select(cyl,gear,carb) 

        cyl gear carb 
Mazda RX4   6 4 4 
Mazda RX4 Wag  6 4 4 
Datsun 710   4 4 1 
Hornet 4 Drive  6 3 1 
Hornet Sportabout 8 3 2 

をMAKING 3列

を持って、私は、データの名前

set.seed(1) 
num.files <- 20 
rand.num <- sample(c(0,1),num.files,replace=T) 
files <- paste0(rep("temp",20),rand.num) 

head(files) 
[1] "temp0" "temp0" "temp1" "temp1" "temp0" 

のランダムなベクトルを作ります最後にcsvファイルに書き込む

library(readr) 
for (i in 1:length(files)) { 
    write_csv(get(files[i]), paste0("C:/temp/temp", i, ".csv"), col_names=F) 
} 

----- WHAT YOU WANTは-----

ファイルの読み取りとidを追加するには、あなたは、列名によってmap

temp <- map(1:20,~read_csv(paste0("C:/temp/temp", .x, ".csv"),col_names=F) %>% mutate(id=.x)) 

を使用することができ、次のように役立つかもしれませんReducefull_joinを使ってそれらをすべて整然とした方法で参加させてください(これはこのおもちゃの例で動作します)。

final <- Reduce(full_join, temp) 

OUTPUT

head(final) 
     X1 X2 id X3 
1 21.0  6  1 NA 
2 21.0  6  1 NA 
3 22.8  4  1 NA 
4 21.4  6  1 NA 
5 18.7  8  1 NA 
関連する問題