2017-10-29 35 views
0

我试图通过运行calc_center功能来计算每个组的中心dplyrgroup_by_summarise功能。但是,我收到一个错误消息,说该列必须是1列而不是2列。我能做些什么绕过它?这是我的代码。R - 汇总误差(数据,点):列中心必须是长度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

回答

0

的问题是在你的函数calc_center,在cov.troby越来越分配给wt

?MASS::cov.trob

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

你会看到x是类型的矩阵,这将举行您纬度经度

0

在未来,如果你提供这将会是不错的,至少的一个简单的例子您的数据用于故障排除/再现性目的。

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

E.g .;

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

你也很可能逃脱使用mutate代替summarise

希望有帮助!