dplyr-应用函数后的错误消息

dplyr-应用函数后的错误消息,r,apply,spatial,dplyr,R,Apply,Spatial,Dplyr,我试图将IDW(反向距离加权)应用于数据库中的不同组。我试图使用dplyr将此函数应用于每个组,但在拆分应用组合中我犯了一个错误。current函数为每组10个观察值返回10个值,但当前dplyr尝试在每个变异单元格中插入10个返回值,而不是为变异单元格插入一个新值 这个问题可能与函数无关,但不幸的是,我找不到一个更简单的函数来显示相同的错误 我得到的错误消息是数据帧已损坏,新列中填充了值 group N Lat Long Obs idw_val 1 A 1

我试图将IDW(反向距离加权)应用于数据库中的不同组。我试图使用dplyr将此函数应用于每个组,但在拆分应用组合中我犯了一个错误。current函数为每组10个观察值返回10个值,但当前dplyr尝试在每个变异单元格中插入10个返回值,而不是为变异单元格插入一个新值

这个问题可能与函数无关,但不幸的是,我找不到一个更简单的函数来显示相同的错误

我得到的错误消息是数据帧已损坏,新列中填充了值

   group N      Lat     Long Obs   idw_val
1      A 1 49.43952 20.42646  11 <dbl[10]>
2      B 1 49.76982 19.70493   8 <dbl[10]>
组N横向长Obs idw\val
1A 149.43952 20.42646 11
2 B 149.76982 19.70493 8
这个例子很有希望澄清这一点。解决方案可能非常简单-一些帮助我的建议非常感谢

require(ggmap)
require(dplyr)
require(raster)
require(sp)
require(gstat)
require(lattice)

####create dataset
set.seed(123)
dh = expand.grid(group = c("A","B","C"),
                 N=1:10)

dh$Lat=rnorm(nrow(dh),50,1)
dh$Long=rnorm(nrow(dh),20,1)
dh$Obs=rpois(nrow(dh),10)
dh

#####create grid
pixels <- 10

#####function defintion 
idw_w=function(x,y,z){

  geog2 <- data.frame(x,y,z)
  coordinates(geog2) = ~x+y

  geog.grd <- expand.grid(x=seq(floor(min(coordinates(geog2)[,1])),
                                ceiling(max(coordinates(geog2)[,1])),
                                length.out=pixels),
                          y=seq(floor(min(coordinates(geog2)[,2])),
                                ceiling(max(coordinates(geog2)[,2])),
                                length.out=pixels))

# Assigning coordinates results in spdataframe.
  grd.pts <- SpatialPixels(SpatialPoints((geog.grd)))
  grd <- as(grd.pts, "SpatialGrid")

##### IDW interpolation.
  geog2.idw <- idw(z ~ 1, geog2, grd, idp=4)

####overlay
  pts <- SpatialPoints(cbind(x, y))
  over(pts, geog2.idw["var1.pred"])
}

#### test function
idw_w(dh$Lat,dh$Long,dh$Obs)

####groupwise dplyr
dh2 = dh %>%
  #   arrange(Block, Species, Date) %>%
  group_by(group) %>%
  mutate(idw_val=idw_w(x=Lat,y=Long,z=Obs)) 

dh2
str(dh2)
require(ggmap)
需要(dplyr)
需要(光栅)
需要(sp)
要求(gstat)
需要(格子)
####创建数据集
种子集(123)
dh=扩展网格(组=c(“A”、“B”、“c”),
N=1:10)
dh$Lat=rnorm(nrow(dh),50,1)
dh$Long=rnorm(nrow(dh),20,1)
dh$Obs=RPOI(nrow(dh),10)
dh
#####创建网格

像素如果我正确理解了您想要的内容,那么只需确保函数返回值向量,而不是
data.frame
对象。我认为,当运行
mutate()
步骤时,此函数将实现您想要的功能:

idw_w=function(x,y,z){

  geog2 <- data.frame(x,y,z)
  coordinates(geog2) = ~x+y

  geog.grd <- expand.grid(x=seq(floor(min(coordinates(geog2)[,1])),
                                ceiling(max(coordinates(geog2)[,1])),
                                length.out=pixels),
                          y=seq(floor(min(coordinates(geog2)[,2])),
                                ceiling(max(coordinates(geog2)[,2])),
                                length.out=pixels))

# Assigning coordinates results in spdataframe.
  grd.pts <- SpatialPixels(SpatialPoints((geog.grd)))
  grd <- as(grd.pts, "SpatialGrid")

##### IDW interpolation.
  geog2.idw <- idw(z ~ 1, geog2, grd, idp=4)

####overlay
  pts <- SpatialPoints(cbind(x, y))
  (over(pts, geog2.idw["var1.pred"]))[,1]
}
idw_w=函数(x,y,z){
geog2