【发布时间】:2020-11-22 20:50:02
【问题描述】:
很抱歉,如果它是重复的,并且由于缺乏可重复性,我不得不将文件链接给你。
我想要做的是:
假设我有一个带有坐标和名称的数据框
df <- tribble(
~Species, ~lat, ~lon,
"a",42.92991, 11.875801,
"b",42.92991, 11.875801,
"c",43.91278, 3.513611,
"d",43.60851, 3.871755,
"e",39.24373, 9.120478
)
我还有一个文件夹有tifrasters,比如
files <- list.files(path="~/world/", pattern="*.tif$", full.name=TRUE, all.files=TRUE)
现在对于每次迭代,我想:
- 使用文件名在数据框中创建一个新列
- 在该列中插入对应
lat和lon的提取值
我试过使用这个for 循环,虽然在纸上看起来还不错,但我不明白为什么它只输出到funvar 最后一个结果。我不喜欢它覆盖结果而不是附加它。
如果我对 mutate 和更简单的对象使用类似的循环,它会附加它们,所以我不确定问题可能是什么
for(i in files){
fraster<- raster(i)
fname<-gsub(".*//|[.].*", "", i)
funvar<-dplyr::mutate(fundata, !!fname:= raster::extract(fraster, coordinates(data.frame(lat,lon))))
}
谢谢!
【问题讨论】:
-
把
funvar <- vector()放在for循环之前。然后使用funvar <- c(funvar, dplyr::mutate(fundata, .... coordinates(data.frame(lat,lon)))) ) -
嗨@maydin,通过这样做,我最终会得到一个包含每次运行的所有变量的向量(也就是说,不仅仅是我想添加的列)。我可以将其转换为数据框,但我会有
Orc_species、Orc_species.1、Orc_species.2等。