【问题标题】:R - Error in summarise_impl(.data, dots) : Column `center` must be length 1 (a summary value), not 2R - summarise_impl(.data, dots) 中的错误:列“中心”的长度必须为 1(汇总值),而不是 2
【发布时间】:2017-10-29 03:52:09
【问题描述】:

我试图通过运行calc_center 函数和dplyrgroup_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

【问题讨论】:

    标签: r dplyr r-car


    【解决方案1】:

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

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

    例如;

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

    您也可以使用mutate 而不是summarise

    希望对您有所帮助!

    【讨论】:

    • 这对我很有帮助。我花了很长时间才看到我试图将整个 df 传递给 summarize 内部的函数,而不仅仅是 1 列。我决定在一个变量的唯一值上使用map_dfr,有点像这样:map_dfr(unique(my.df$mycol), function(x){newval&lt;-my.df %&gt;% filter(mycol==x) %&gt;% myfun return(newval, x})
    【解决方案2】:

    问题在于你的函数calc_centercov.trob 中的y 被分配给wt

    ?MASS::cov.trob

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

    您会看到 x 是矩阵类型,这将包含您的 latitudelongitude

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-14
      • 2020-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多