r - 遍历数据框中的每一行,从栅格中提取值并写入 csv 文件

标签 r dataframe apply raster

我有一个包含 Namelongitudelatitude 列的数据框。我想要一个遍历每一行的函数,从栅格堆栈中提取值并根据 Name 列编写 csv 文件。

Name    Lon     Lat
Name1   11.11   47.87
Name2   150.1   -40.4
Name3   -50.2   -3.5
Name4   -100.3  49.8

library(raster)
s <- stack(replicate(5, {raster(matrix(runif(2160*4320), 2160), 
         xmn=-180, xmx=180, ymn=-90, ymx=90)}))

I can do that one by one:

location <- data.frame(11.11, 47.87)
ex <- extract(s, location)
write.csv(ex, "Name1.csv")

最佳答案

一种非常传统的方法是使用 for 循环

d1 <-c("Name1", "Name2","Name3", "Name4")
d2 <- c(11.11,150.1,-50.2,-100.3)
d3 <-c(47.87, -40.4, -3.5, 49.8)
data.df <-data.frame(d1,d2,d3)

for(i in 1:nrow(data.df)) 
{
  location <- data.frame(data.df[i,2],data.df[,3])
  ex <- extract(s, location)
  fn1<-paste0(data.df[i,1],".csv")
  write.csv(ex, fn1)
}

生成了四个文件,其中包含如下信息:

"","layer.1","layer.2","layer.3","layer.4","layer.5"
"1",0.471816286211833,0.115963410818949,0.399704266572371,0.464667820138857,0.820669727399945
"2",0.616754011251032,0.354018000885844,0.602565947687253,0.86519843316637,0.660861984360963
"3",0.0691961287520826,0.128835600335151,0.199198298621923,0.968016018159688,0.597145217470825

我希望这就是您要寻找的结果。 可能有一些更高级和执行的方法(基于 apply-family???)并且作为 R 初学者我也很感兴趣。

关于r - 遍历数据框中的每一行,从栅格中提取值并写入 csv 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34727250/

相关文章:

javascript - 为什么我应该调用 Function.prototype.apply.call(x, ...) 而不是 x.apply(...)?

r - 在 R 中的 mutate 语句中调用 API

r - 使用 R 交换 data.frame 同一行中的特定观察值

r - 如何从 rstanarm 对象中提取 stan 代码

python - 如何根据字典键和值过滤 Pandas 数据框行?

r - 解决在数据框列中存储为文本的方程(使用其他列作为输入)

使用子命令和 R 中的管道运算符方法删除特定列中的字符

python - Pandas to_dict() 将日期时间转换为时间戳

r - 将两个相同的数据框列组合成 R 中的逗号分隔列

r - 不使用循环向 xml 对象添加多个子对象