R 循环遍历数据框中的每一行,从光栅中提取值并写入csv文件

R 循环遍历数据框中的每一行,从光栅中提取值并写入csv文件,r,dataframe,apply,raster,R,Dataframe,Apply,Raster,我有一个带有名称、经度和纬度列的数据框。我想要一个函数,它遍历每一行,从光栅堆栈中提取值,并基于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),

我有一个带有
名称
经度
纬度
列的数据框。我想要一个函数,它遍历每一行,从光栅堆栈中提取值,并基于
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")
Name Lon Lat
名称11.11 47.87
名称2150.1-40.4
名称3-50.2-3.5
名称4-100.3 49.8
图书馆(光栅)

s非常传统的方法适用于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)
}
我希望这就是你想要的结果。
可能会有一些更高级、更实用的方法(基于
apply
-family???),作为R初学者,我也很感兴趣

非常传统的方法适用于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)
}
我希望这就是你想要的结果。 可能会有一些更高级、更实用的方法(基于
apply
-family???),作为R初学者,我也很感兴趣

应用:

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

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("Name" = d1, "Lon" = d2, "Lat" = d3)

apply(X = data.df, 1, function(x, s) {
        location <- as.numeric(c(x[2], x[3]))
        ex <- extract(s, location)
        write.csv(ex, paste0(x[1], ".csv"))
}, s = s)
库(光栅)
s应用时:

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

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("Name" = d1, "Lon" = d2, "Lat" = d3)

apply(X = data.df, 1, function(x, s) {
        location <- as.numeric(c(x[2], x[3]))
        ex <- extract(s, location)
        write.csv(ex, paste0(x[1], ".csv"))
}, s = s)
库(光栅)

通过执行
ex只执行一次调用
extract
会更有效通过执行
ex只执行一次调用
extract
会更有效