#r #csv
#r #csv
Вопрос:
Мои файлы (например, у меня есть сотни таких файлов):
France.csv
France_variables.csv
Germany.csv
Germany_variables.csv
Spain.csv
Spain_variables.csv
Portugal.csv
Portugal_variables.csv
Я хочу объединить Францию с France_variables, Германию с Germany_variables и т.д. Я знаю, что могу использовать rbind с двумя файлами, но я хочу сделать это как цикл, потому что у меня их много для объединения. Я не уверен, как выполнить поиск по строке, а затем выполнить повторную привязку в цикле или есть ли лучший способ сделать это.
Я новичок в R, поэтому буду признателен за любую помощь.
Комментарии:
1. Что вы имеете в виду под
merge
?2. добавьте данные из France.csv во France_variables.csv
3. Вы хотите разные
df
для каждой страны? или вы хотите, чтобы все они были объединены в один df. Заголовки одинаковые или разные?4. Различный df для каждой страны
5. С точки зрения подхода, я бы сказал, что для начала нужно выяснить, как поместить каждый набор в список, например list (Франция, csv, Германия, csv, …) и list (France_variables.csv, Germany_variables.csv, …). Затем я бы использовал цикл for или lapply () для их объединения, где все выходные данные были бы в виде списка
Ответ №1:
Вы можете использовать что-то вроде этого:
library(tidyverse)
#Get Unique countries
country <- unique(gsub('\..*$|_.*', '', list.files(path = ".", pattern = "csv")))
#Loop
for (i in country) {
dat <- list.files(path = ".", pattern = i) %>% map(read_csv) %>% reduce(rbind)
assign( paste("df", i, sep = "_"), dat)
rm(dat)
}
Это создаст фреймы данных, такие как df_France, df_Germany и т.д.
Комментарии:
1. Спасибо, я попробую это
Ответ №2:
Поиграйте с grepl и посмотрите, сможете ли вы заставить это работать……
# set the working directory (where files are saved)
setwd("C:/your_path_here/")
file_names = list.files(getwd())
file_names = file_names[grepl(".TXT",file_names)]
# print file_names vector
file_names
# see the data structure
str(file)
# run read.csv on all values of file_names
files = lapply(file_names, read.csv, header=F, stringsAsFactors = F)
files = do.call(rbind,files)
# run only on WY.TXT and NM.TXT
str(files)
# set column names
names(files) = c("col1", "col2", "col3", "col4", "col5")
str(files)
# finally...
write.table(files, "C:/your_path/mydata.txt", sep="t")
write.csv(files,"C:/your_path/mydata.csv")