R - summarise_impl(.data,dots)中的错误:列`center`必须是长度1(摘要值),而不是2

时间:2017-10-29 03:52:10

标签: r dplyr r-car

我正在尝试使用calc_center的{​​{1}}和dplyr函数运行group_by_函数来计算每个组的中心。但是,我收到一条错误消息,说该列必须是1列而不是2列。我该怎么做才能绕过它?这是我的代码。

summarise

这是我的错误

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) : 必须是长度1(汇总值),而不是2

2 个答案:

答案 0 :(得分:2)

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

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

E.g;

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

您也可以使用mutate代替summarise

希望这很有用!

答案 1 :(得分:0)

问题在于您的功能calc_centery中的cov.trob被分配到wt

?MASS::cov.trob

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

您会看到x属于矩阵类型,这将保留您的纬度经度