R代码无法移动数据框的特定行

我得到了一个数据框df,它根据像这样的坐标表示几个对象:

object latitude longitude
1         42         5
2         43         4
3         43         4
4         45         3
5         45         3
6         50         2

如您所见,df是根据坐标排序的。

对于某些测试,我想将每个对象链接到第二个最近的对象。 更确切地说,我希望我的数据框看起来像这样(删除最后一行):

object latitude longitude
1         43         4
2         45         3
3         45         3
4         50         2
5         50         2

我尝试了这段代码:

for (i in 2:nrow(df_obs_all_synth_agro_zone)) {
  l<-c()
  while ((df_obs_all_synth_agro_zone$lon[i]==df_obs_all_synth_agro_zone$lon[i-1]) && (df_obs_all_synth_agro_zone$lat[i]==df_obs_all_synth_agro_zone$lat[i-1])) {#if coordinates =
    l<-c(l,i)
    i=i+1
    #print(i) issue 
  }
  #I transforme the rows concerned
  print(i)
  print(l)
  #if length>1, only one row is changed in the dataframe
  if (length(l)>1){
  df_obs_all_synth_agro_zone[(l[1]-1):l[-1],]<-transform(df_obs_all_synth_agro_zone[(l[1]-1):l[-1],], df_obs_all_synth_agro_zone$lon[(l[1]-1):l[-1]] <- c(df_obs_all_synth_agro_zone$lon[i], NA))
  df_obs_all_synth_agro_zone[(l[1]-1):l[-1],]<-transform(df_obs_all_synth_agro_zone[(l[1]-1):l[-1],], df_obs_all_synth_agro_zone$lat[(l[1]-1):l[-1]] <- c(df_obs_all_synth_agro_zone$lat[i], NA))
  i=i+1
  }
  else if (length(l)==1){
    df_obs_all_synth_agro_zone[l[1],"lon"]<-df_obs_all_synth_agro_zone$lon[i]
    df_obs_all_synth_agro_zone[l[1],"lat"]<-df_obs_all_synth_agro_zone$lat[i]
    df_obs_all_synth_agro_zone[l[1]-1,"lon"]<-df_obs_all_synth_agro_zone$lon[i]
    df_obs_all_synth_agro_zone[l[1]-1,"lat"]<-df_obs_all_synth_agro_zone$lat[i]
    i=i+1
  } 
  else {
    df_obs_all_synth_agro_zone[i-1,"lon"]<-df_obs_all_synth_agro_zone$lon[i]
    df_obs_all_synth_agro_zone[i-1,"lat"]<-df_obs_all_synth_agro_zone$lat[i]
    i=i+1
  }
}

问题在代码的这一部分中:

if (length(l)>1){
  df_obs_all_synth_agro_zone[(l[1]-1):l[-1],]<-transform(df_obs_all_synth_agro_zone[(l[1]-1):l[-1],], df_obs_all_synth_agro_zone$lon[(l[1]-1):l[-1]] <- c(df_obs_all_synth_agro_zone$lon[i], NA))
  df_obs_all_synth_agro_zone[(l[1]-1):l[-1],]<-transform(df_obs_all_synth_agro_zone[(l[1]-1):l[-1],], df_obs_all_synth_agro_zone$lat[(l[1]-1):l[-1]] <- c(df_obs_all_synth_agro_zone$lat[i], NA))
  i=i+1

代码只更改了一行,而没有更改我想要的所有行,我也不知道为什么。

评论