Организовать CSV по идентификатору и открыть / обработать подмножество в R - PullRequest
2 голосов
/ 09 апреля 2020

У меня есть следующие CSV-файлы:

files = c("C:\\Users\\sh\\/2018/April 17 2018/user_22226.csv", 
"C:\\Users\\sh\\/2018/April 17 2018/user_22227.csv", 
"C:\\Users\\sh\\/2018/April 17 2018/user_22228.csv", 
"C:\\Users\\sh\\/2018/April 17 2018/user_22232.csv", 
"C:\\Users\\sh\\/2018/April 2 2018/user_21785.csv", 
"C:\\Users\\sh\\/2018/April 2 2018/user_21815.csv", 
"C:\\Users\\sh\\/2018/April 2 2018/user_21821.csv", 
"C:\\Users\\sh\\/2018/April 2 2018/user_21822.csv", 
"C:\\Users\\sh\\/2018/April 2 2018/user_22226.csv", 
"C:\\Users\\sh\\/2018/April 2 2018/user_22227.csv", 
"C:\\Users\\sh\\/2018/April 2 2018/user_22228.csv", 
"C:\\Users\\sh\\/2018/April 2 2018/user_22230.csv", 
"C:\\Users\\sh\\/2018/April 2 2018/user_22232.csv", 
"C:\\Users\\sh\\/2018/April 23 2018/user_22921.csv", 
"C:\\Users\\sh\\/2018/April 9 2018/user_22226.csv", 
"C:\\Users\\sh\\/2018/April 9 2018/user_22227.csv", 
"C:\\Users\\sh\\/2018/April 9 2018/user_22228.csv", 
"C:\\Users\\sh\\/2018/April 9 2018/user_22230.csv", 
"C:\\Users\\sh\\/2018/April 9 2018/user_22232.csv", 
"C:\\Users\\sh\\/2018/August 13 2018/user_29607.csv")

Я могу организовать их по конечному идентификатору с помощью:

files_sorted = files[order(gsub('.*_(\\d{5})[.].*','\\1',files))]

, давая мне:

 [1] "C:\\Users\\sh\\/2018/April 2 2018/user_21785.csv"  
 [2] "C:\\Users\\sh\\/2018/April 2 2018/user_21815.csv"  
 [3] "C:\\Users\\sh\\/2018/April 2 2018/user_21821.csv"  
 [4] "C:\\Users\\sh\\/2018/April 2 2018/user_21822.csv"  
 [5] "C:\\Users\\sh\\/2018/April 17 2018/user_22226.csv" 
 [6] "C:\\Users\\sh\\/2018/April 2 2018/user_22226.csv"  
 [7] "C:\\Users\\sh\\/2018/April 9 2018/user_22226.csv"  
 [8] "C:\\Users\\sh\\/2018/April 17 2018/user_22227.csv" 
 [9] "C:\\Users\\sh\\/2018/April 2 2018/user_22227.csv"  
[10] "C:\\Users\\sh\\/2018/April 9 2018/user_22227.csv"  
[11] "C:\\Users\\sh\\/2018/April 17 2018/user_22228.csv" 
[12] "C:\\Users\\sh\\/2018/April 2 2018/user_22228.csv"  
[13] "C:\\Users\\sh\\/2018/April 9 2018/user_22228.csv"  
[14] "C:\\Users\\sh\\/2018/April 2 2018/user_22230.csv"  
[15] "C:\\Users\\sh\\/2018/April 9 2018/user_22230.csv"  
[16] "C:\\Users\\sh\\/2018/April 17 2018/user_22232.csv" 
[17] "C:\\Users\\sh\\/2018/April 2 2018/user_22232.csv"  
[18] "C:\\Users\\sh\\/2018/April 9 2018/user_22232.csv"  
[19] "C:\\Users\\sh\\/2018/April 23 2018/user_22921.csv" 
[20] "C:\\Users\\sh\\/2018/August 13 2018/user_29607.csv"

Моя цель состоит в том, чтобы теперь обрабатывать файлы CSV с одинаковым идентификатором, например, заканчивающиеся на «22226.csv»

Мой идеальный вывод - иметь либо одну DF / таблицу, либо List с файлами CSV из тот же идентификатор. Затем я запусту этот единственный DF / list в функции, которую я написал для предварительной обработки данных.

Я пытался использовать group_by () и unique (), но мне возвращены NA.

1 Ответ

2 голосов
/ 09 апреля 2020

Мы можем использовать split для создания list файлов. Группировка основана на подстроке, полученной путем удаления символов до тех пор, пока _

lst1 <- split(files, sub('.*_', '', files))

не извлечет элементы с помощью [[

lst1[["22232.csv"]]
#[1] "C:\\Users\\sh\\/2018/April 17 2018/user_22232.csv"
#[2] "C:\\Users\\sh\\/2018/April 2 2018/user_22232.csv" 
#[3] "C:\\Users\\sh\\/2018/April 9 2018/user_22232.csv" 
...