Используя определенную функцию, я хочу объединить пары кадров данных для множественных пар в каталоге R. Я пытаюсь написать цикл «for», который будет выполнять эту работу для меня, и, хотя связанные вопросы, такие как Merge several data.frames into one data.frame with a loop, полезны, я изо всех сил пытаюсь адаптировать примеры циклов для этого конкретного использования.Использование для циклов для соответствия парам кадров данных в R
Мои кадры данных заканчиваются либо «_df1.csv», либо « _df2.csv». Каждая пара, которую я хочу объединить в выходной кадр данных, имеет идентичное число при существовании имени файла (т. Е. 543_df1.csv и 543_df2.csv).
Я создал строку символов для каждого из двух типов файлов в моем каталоге с помощью list.files команды, как показано ниже:
df1files <- list.files(path="~/Desktop/combined files” pattern="*_df1.csv", full.names=T, recursive=FALSE)
df2files <- list.files(path="="~/Desktop/combined files ", pattern="*_df2.csv", full.names=T, recursive=FALSE)
Функции и команды, которые я хочу применить для того, чтобы объединить каждая пара кадров данных следующим образом:
findRow <- function(dt, df) { min(which(df$datetime > dt)) }
rows <- sapply(df2$datetime, findRow, df=df1)
merged <- cbind(df2, df1[rows,])
Я теперь пытаюсь включить эти команды в течение цикла, начиная с чем-то по следующим направлениям, чтобы предотвратить меня от необходимости вручную объединить пары:
for(i in 1:length(df2files)){ ……
Я еще не сильный программист R, и ударил стену, поэтому любая помощь будет принята с благодарностью.
спасибо за выше. dfs создает двухэлементную матрицу списка с df1 и df2, но команда lapply (dfs, merge2) предполагает, что аргумент df2 отсутствует. Появилось следующее сообщение об ошибке: Ошибка в lapply (X = X, FUN = FUN, ...): отсутствует аргумент «df2», без значения по умолчанию. Любая идея, как это решить? – Emily
и как бы сохранить полученные объединенные кадры данных из моей матрицы списка в виде файлов csv с помощью команды write.csv (data, dataname.csv) в кодировке? – Emily
спасибо, но единственным способом, которым я мог создать два списка фреймов данных, было преобразование вашего кода в следующее: 'lapply (df1files, function (x) read.csv)'. Затем это сработало, но команда mapply все еще не дала мне правильно объединенных наборов данных, то есть все ячейки из df1 теперь читают «NA», и я получаю большой номер. предупреждений! – Emily