0

我试图通过运行calc_center带有dplyr'sgroup_by_summarise函数的函数来计算每个组的中心。但是,我收到一条错误消息,说该列必须是 1 列而不是 2 列。我该怎么做才能绕过它?这是我的代码。

library(dplyr)
library(car)

calc_center <- function(x,y){
  MASS::cov.trob(cbind(x, y)$center
}

results <- data %>%
  group_by(group) %>%
  summarise(center=calc_center(Latitude, Longitude))

这是我的错误

Error in summarise_impl(.data, dots) : 

center的长度必须为 1(汇总值),而不是 2

4

2 回答 2

3

将来,如果您至少包含一个简短的数据示例以用于故障排除/重现性目的,那就太好了。

问题可能是因为您想将该函数应用于LatitudeLongitude列的每一行。在这种情况下,使用dplyr::rowwise()应该可以解决问题:

例如;

results <- data %>%
  group_by(group) %>%
  rowwise() %>%
  summarise(center=calc_center(Latitude, Longitude)) %>%
  ungroup()

您也可以使用mutate而不是summarise.

希望这有帮助!

于 2017-12-07T06:28:42.727 回答
0

问题出在你的函数calc_center中,yincov.trob被分配到wt

?MASS::cov.trob

cov.trob(x, wt = rep(1, n), cor = FALSE, center = TRUE, nu = 5,
     maxit = 25, tol = 0.01)

你会看到它x是矩阵类型,这将保存你的纬度经度

于 2017-10-29T03:59:32.983 回答