将提取列表转换为csv文件

时间:2019-06-01 01:48:39

标签: r r-raster sp

我已将栅格文件和折线shapefile上载到R,并使用extract函数从沿折线的每个像素中提取数据。如何将extract输出的列表转换为CSV文件?

2 个答案:

答案 0 :(得分:1)

总是包括一个简单的自包含示例(此示例摘自?raster::extract

library(raster)
r <- raster(ncol=36, nrow=18, vals=1:(18*36))
cds1 <- rbind(c(-50,0), c(0,60), c(40,5), c(15,-45), c(-10,-25))
cds2 <- rbind(c(80,20), c(140,60), c(160,0), c(140,-55))
lines <- spLines(cds1, cds2)
e <- extract(r, lines)

e是一个列表

> e
[[1]]
 [1] 126 127 161 162 163 164 196 197 200 201 231 232 237 266 267 273 274 302 310 311 338 346 381 382 414 417 450 451 452 453 487 488

[[2]]
 [1] 139 140 141 174 175 177 208 209 210 213 243 244 249 250 279 286 322 358 359 394 429 430 465 501 537

,并且您不能直接将其写入csv,因为列表元素(向量)的长度不同。

所以首先使它们的长度相同

x <- max(sapply(e, length))
ee <- sapply(e, `length<-`, x)

让我们看看

head(ee)
#     [,1] [,2]
#[1,]  126  139
#[2,]  127  140
#[3,]  161  141
#[4,]  162  174
#[5,]  163  175
#[6,]  164  177
tail(ee)
#      [,1] [,2]
#[27,]  450   NA
#[28,]  451   NA
#[29,]  452   NA
#[30,]  453   NA
#[31,]  487   NA
#[32,]  488   NA

现在您可以写入一个csv文件

write.csv(ee, "test.csv", row.names=FALSE)

答案 1 :(得分:0)

如果我了解您的要求,我认为您可以使用unlist()解决您的情况。

d <- c(1:10)      # creates a sample data frame to use

d <- as.list(d)   # converts the data frame into a list

d <- unlist(d)    # converts the list into a vector