2017-03-05 14 views
0

私は多くのcsvファイルを持っています。私は "data.table"で読み込もうとしています。 csvファイルの構造は同じです(3列)。RのマルチCSVファイルを読み取っているときにデータを列として追加するには?

私の目標は、1つのメインデータフレーム内のすべてのcsvファイルを読むことです!各csvファイルは、行ではない列として追加する必要があります。例えば

私の主なDFの構造は次のようにあるべきである:

Name  Name2  csv_file_name_1  csv_file_name_2 ....... 

、私は何をしたいです。(私は、列数3を読んでいる)新しいCSVファイルを読みます列としてDFに追加します。

たとえば、30個のcsvファイルがある場合は、すべてを読み込み、メインのデータフレームに新しい列として3番目の列を追加する必要があります。 (最終的なDFは30列にする必要があります)

ファイルを読み込んでファイル名を取得でき、すべてがうまくいきます。

files = list.files(path = path, pattern=".*csv") 
for (i in 1:length(files)) assign(str_sub(files[i],11,-5), 
           fread(files[i],colClasses = c("NULL", "NULL", NA))) 

どのように私はメインのDFに列として追加できますか? "assign"は新しいデータフレームを作成しています!

答えて

1

cbind()を使用してこれを実現できます。これは、読み込んだ新しいデータフレームをそれぞれ既存のものにバインドできます。私はかもしれないと言いました。これは、読んだ各CSVファイルが同じ数の行を持つことが期待される場合にのみ有効です。これがなぜ必要なのかはあなたには明らかです。念頭に置いて、この警告では、ここにあなたがしたい出力のタイプを与えるために2つのCSVファイルを読み込み、コードスニペットです:

df  <- read.csv(file="path/to/file1.csv", sep=",", header=TRUE) 
df_new <- read.csv(file="path/to/file2.csv", sep=",", header=TRUE) 

# this next is required only if you need to change the column names in each 
# subsequent file to something else 
names(df_new) <- c("Name2", "csv_file_name2", "other_column2") 

df <- cbind(df, df_new) 
+0

115のcsvファイルがありますが、私はcbindで試しましたが、まだ列ではなく列として追加しています! –

+0

@BigDataあなたのコメントはあまり意味がありませんが、私の推測ではあなたの現在のコードに問題があります。単一の最終データフレームが必要な場合は、実際に行または列を組み合わせるオプションがあります。あなたが記述したところから、 'cbind()'がここに行く方法です。 –

0

あなたはcbindを試みたことがありますか?

理想的には、各CSVテーブルには、その識別子でマージできる一意の識別子があります。

サイドノート、cbindを使用すると、各data.frameの行が同じ観測に対応するように注意してください(つまり、df1の行1はdf2の行1と同じ観測用です)。

関連する問題