0
我有超過100個文本文件需要導入到R中。其中一些文件有不同的標題。我知道我可以在使用do.call將它們合併到一個數據框之前將它們分配給所有相同的標頭。但在此之前,我需要將每個文件的文件名保存爲一個新列。我該如何解決這個問題?我有太多的文件手動創建新的列。謝謝讀取R中具有不同標題的多個.txt文件並將文件名保存爲每個文件的列
我有超過100個文本文件需要導入到R中。其中一些文件有不同的標題。我知道我可以在使用do.call將它們合併到一個數據框之前將它們分配給所有相同的標頭。但在此之前,我需要將每個文件的文件名保存爲一個新列。我該如何解決這個問題?我有太多的文件手動創建新的列。謝謝讀取R中具有不同標題的多個.txt文件並將文件名保存爲每個文件的列
我做了一個可重複的例子。 跳轉到你想要什麼如果你想跳過可重複的例子。有些數據要寫入csv
文件。 temp0
有2列temp1
有3列
編造數據和
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
把它們寫出來的文件,我使數據的名稱的隨機向量
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)
}
-----你想要什麼-----
讀取文件並添加id
,您可以使用map
temp <- map(1:20,~read_csv(paste0("C:/temp/temp", .x, ".csv"),col_names=F) %>% mutate(id=.x))
根據您的列名,以下可能幫助你用Reduce
和full_join
(它適用於這個玩具的例子)以一種整潔的方式加入他們。
final <- Reduce(full_join, temp)
輸出
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