我正在尝试使用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
答案 0 :(得分:2)
将来,如果您至少包含一个简要的数据示例,以便进行故障排除/重现性,那就太好了。
问题很可能是因为您希望将该功能应用于Latitude
和Longitude
列的每一行。
在这种情况下,使用dplyr::rowwise()
可以解决问题:
E.g;
results <- data %>%
group_by(group) %>%
rowwise() %>%
summarise(center=calc_center(Latitude, Longitude)) %>%
ungroup()
您也可以使用mutate
代替summarise
。
希望这很有用!
答案 1 :(得分:0)
问题在于您的功能calc_center
,y
中的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
属于矩阵类型,这将保留您的纬度和经度