【问题标题】:How to loop over row values in a two column data frame in R?如何循环R中两列数据框中的行值?
【发布时间】:2023-03-14 11:40:02
【问题描述】:

我有一个看起来像这样的数据框:

mydata <- data.frame(name = c("Rick", "Dan", "Michelle", "Ryan", "Gary"),
                     id = c (1:5))

我想在行上使用循环并为每个变量提取名称和 id 变量。这用于导出 GTiff 文件。重要的部分是循环每个值。我在下面展示了如何使用paste 函数在必要时将名称作为字符串导入。在这种情况下,我将有 5 个 geotiff 文件,每个名称一个。

head(mydata)

x <- paste(mydata[1, 1])
x
y <- paste0(x, ".asc")
y
z <- paste(mydata[1, 2])
z

species_raster <- raster(y)

m <- c(0, as.numeric(z), 0, as.numeric(z), 1, 1)
rclmat <- matrix(m, ncol = 3, byrow = TRUE)
rc <- reclassify(species_raster, rclmat)
plot(rc)
writeRaster(rc,
            filename = x,
            format = "GTiff",
            overwrite = TRUE)

【问题讨论】:

    标签: r loops apply


    【解决方案1】:

    您可以使用此获取粘贴文件名的列表

    outputnames <- lapply(mydata[,1], paste0, ".asc")
    
    #OR
    
    outputnames <- lapply(mydata$name, paste0, ".asc")
    

    这些可以稍后在另一个应用函数中使用,或者像这样在循环中引用

    for(i in mydata){
      writeRaster(rc,
                  filename = i,
                  format = "GTiff",
                  overwrite = TRUE)
    }
    

    在循环中引用数据框的另一种方法如下

    for(i in 1:nrow(mydata)){
      filename <- paste(mydata$name[i], ".asc")
      print(filename)
      Idascharacter <- as.character(mydata$id[i])
      print(Idascharacter)
    }
    

    【讨论】:

      猜你喜欢
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-28
      • 1970-01-01
      • 1970-01-01
      • 2018-12-31
      • 2018-09-29
      相关资源
      最近更新 更多