У меня есть вектор названий городов под названием cities
:
> cities
[1] 'amsterdam' 'atlanta' 'bangalore'
[4] 'bogota' 'boston' 'brisbane'
[7] 'brussels' 'cairo' 'cape'
У меня есть две папки, в которых присутствуют одинаковые города и они упорядочены одинаково. Я превратил каждую папку в список. Каждый файл в list1
содержит географические данные c для одного города. Каждый файл в list2
содержит данные о времени в пути для одного города.
> list1
[[1]]
[1] "C:/geo/amsterdam.json"
[[2]]
[1] "C:/geo/atlanta.json"
[[3]]
[1] "C:/geo/bangalore.json"
> list2
[[1]]
[1] "C:/time/amsterdam.csv"
[[2]]
[1] "C:/time/atlanta.csv"
[[3]]
[1] "C:/time/bangalore.csv"
Я хотел бы написать oop,
- На основе положения города в
cities
, - читает в соответствующем файле из
list1
, - читает в соответствующем файле из
list2
, - объединяет два набора данных в набор данных, имя которого соответствует позиции индекса в
cities
Примерно так:
for (i in length(cities)){
geo <- (sf::st_read(list1[i])
time <- (data.table::fread(list2[i])
merged[i] <- merge(geo, time, by='id') #both datasets have an 'id' column
}
В настоящее время этот l oop выдает ошибку number of items to replace is not a multiple of replacement length
. Когда я пытаюсь проиндексировать каждый вывод (то есть geo[i] <- (sf::st_read(list1[i])
...), я получаю ошибку new columns would leave holes after existing columns
.
Есть ли способ выполнять операции над элементами списка на основе положения этих элементов (или их эквивалента) в другом списке / векторе?