在spatial for循环中使用if-else语句发出

在spatial for循环中使用if-else语句发出,r,for-loop,spatial,sf,R,For Loop,Spatial,Sf,我正在做一个项目,计算在地址列表150米或500米范围内发生的某种类型的犯罪数量。虽然我能够在没有for循环的情况下成功地实现这一点,但由于我需要使用不同的犯罪定义,这有点麻烦,因此我尝试将过程缩短一点 有三个数据集,都是sf对象。第一个是data\u sf一个带有点的sf对象,一个ID变量,以及year,一个指定使用哪个犯罪数据集的变量。第二个sf对象,crime1516和crime1617是2015-2016年以及2016-2017年的犯罪。我的一般方法是使用for循环遍历每一行 为i行创建

我正在做一个项目,计算在地址列表150米或500米范围内发生的某种类型的犯罪数量。虽然我能够在没有for循环的情况下成功地实现这一点,但由于我需要使用不同的犯罪定义,这有点麻烦,因此我尝试将过程缩短一点

有三个数据集,都是sf对象。第一个是
data\u sf
一个带有点的sf对象,一个ID变量,以及
year
,一个指定使用哪个犯罪数据集的变量。第二个sf对象,
crime1516
crime1617
是2015-2016年以及2016-2017年的犯罪。我的一般方法是使用for循环遍历每一行

  • 为i行创建边界框
  • a。如果
    year==1
    ,计算i bbox的
    crime1516
    交叉口数量 B否则,如果
    year==1
    计算与
    crime1617
  • 计算交点并将其放入数据行中 然而,我似乎无法让今年的==1部分工作

    下面是我尝试使用的for循环的代码:

    data_sf$vc150m <- for (i in 1){
      bbox150m <- st_buffer(data_sf[i,]$geometry, dist = 150)
      if (data_sf[i, "year"] == "1"){
        vc150m <- st_intersection(x = bbox150m, y = crime1516_v)
        data_sf[i,]$vc150m <- vc150m %>% 
          group_by()
        count()
      } else if(data_sf[i,]$year == 2){
        vc150m <- st_intersection(x = bbox150m, y = crime1617_v)
        data_sf[i,]$vc150m <- vc150m %>% 
          group_by() %>%
          count()
      } else {
        data_sf[i,]$vc150m <- NULL
      }
    }
    

    根据语言,我猜这与
    if
    语句有关,但我不能确切地找出它的原因。在这个问题上,我没有发现任何有用的东西,也没有发现它的真正含义。对此的任何帮助,或for循环/函数的任何其他错误,都将不胜感激

    你能提供一些样本数据以便我们重现你的错误吗?请参阅指南。能否提供一些示例数据,以便我们重现您的错误?请参阅以获取指导
    countcrimes <- function(d, output){
      output <- data.frame(data_sf$ID, data_sf$year, data_sf$geometry)
      for (i in 1:dim(data_sf)[1]){
        bbox150m <- st_buffer(data_sf[i,"geometry"], dist = d)
        if (data_sf[i,"year"] == "1"){
          vc150m <- st_intersection(x = bbox150m, y = crime1516_v)
          output[i,] <- vc150m %>% 
            group_by()
          count()
        } else if(data_sf[i,]$year == "2"){
          vc150m <- st_intersection(x = bbox150m, y = crime1617_v)
          output[i,] <- vc150m %>% 
            group_by() %>%
          count()
        }
      }
      return(output)
    }
    
    data_sf$vc150m <- countcrimes(150, vc150m)
    
    Error in matrix(if (is.null(value)) logical() else value, nrow = nr, dimnames = list(rn,  : 
      length of 'dimnames' [2] not equal to array extent