【发布时间】:2020-05-06 11:01:31
【问题描述】:
我有一个名为cities的城市名称向量:
> cities
[1] 'amsterdam' 'atlanta' 'bangalore'
[4] 'bogota' 'boston' 'brisbane'
[7] 'brussels' 'cairo' 'cape'
我有两个文件夹,其中存在相同的城市并以相同的方式排序。我已经把每个文件夹变成了一个列表。 list1 中的每个文件都包含一个城市的地理数据。 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"
我想写一个循环,
- 基于城市在
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
}
目前,此循环给出错误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。
有没有办法根据这些元素(或它们的等价物)在另一个列表/向量中的位置对列表元素执行操作?
【问题讨论】:
-
没有一些文件来重现我最好的建议是使用
dplyr::inner_join()类似:merged <- list(); for (i in 1:length(cities)){ geo <- (sf::st_read(list1[i])); time <- (data.table::fread(list2[i])); merged[[i]} <- dplyr::inner_join(geo, time, by='id') }