【问题标题】:How to use loop function in r to add new data columns?如何在 r 中使用循环函数来添加新的数据列?
【发布时间】:2021-04-08 15:25:32
【问题描述】:

我有 40 个关于不同年份数据的栅格文件。我想输入它们并在我的名为 predictwgs 的原始文件中添加新列。我使用提取函数来匹配我的原始数据,但在运行此代码后,它只添加了一个名为“i”的列,而不是 40 个新列。我怎样才能改变这种情况?

> dir<-"Desktop/Surface downwelling shortwave radiation"
> files<-list.files(path=dir, pattern=NULL, full.names = TRUE) for (i in
> 1:length(files)){   b <- raster(files[i])  
> predictwgs$i<-extract(b,as(predictwgs,'Spatial'))   }

【问题讨论】:

    标签: r loops extract raster


    【解决方案1】:

    在这种情况下,很明显,在循环的每个步骤中,您都将值分配给名为 predictwgs$i 的同一变量。这是您的代码更清晰的形式:

    files<-list.files(path=dir, full.names = TRUE) 
    sp <- as(predictwgs, "Spatial")
    
    for (i in 1:length(files)){
        b <- raster(files[i])  
        predictwgs$i <- extract(b, sp)
    }
    

    predictwgs$i 没有区别,例如`predictwgs$value

    要使用循环变量i 的值,您可以这样做:

    for (i in 1:length(files)){
        b <- raster(files[i])  
        predictwgs[[as.character(i)]] <- extract(b, sp)
    }
    

    虽然看起来你避免了循环并这样做:

    b <- stack(files)
    e <- extract(b, sp)
    p <- cbind(predictwgs, e)  
    

    这里是两个 for 循环之间区别的说明。

    你的方法:

    d <- data.frame(x=c("a"))
    for (i in 1:5){
        d$i <- i
    }
    d
    #  x i
    #1 a 5
    

    你的意图:

    d <- data.frame(x=c("a"))
    for (i in 1:5){
       d[[paste0("v", i)]] <- i
    }
    d
    #  x v1 v2 v3 v4 v5
    #1 a  1  2  3  4  5
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-02
      • 1970-01-01
      • 1970-01-01
      • 2016-05-03
      • 2011-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多