【发布时间】:2015-03-03 22:10:52
【问题描述】:
我正在尝试通过编写一个插入聚合的函数来从 for 循环中毕业。进展不顺利。
样本数据为:
group <- c(1, 1, 1, 2, 2, 2, 2, 2, 3, 1, 1, 1, 2, 2)
gdp <- c(3.5, 4.2, 5, 4, 4.2, 5, 5.5, 6, 3.5, 3.4, 4.0, 4.1, 4.3, 4.7)
df <- data.frame(group, gdp)
函数的目标,它不能正常工作,是对于一个组内的每个 x (gdp) 值,找到 x 与 x 的最小值之间的绝对差,以及 x 与 x 的最大值之间的差x,并返回较小的差值。如果组中只有 1 个值,或者该值是组中的第一项或最后一项,则差值为 0,在这种情况下返回 0。
顺序很重要,因为我不希望它整理所有第 1 组的;我希望将函数应用于组中的每个 gdp 值,然后继续到下一个组。
函数是:
get_dist <- function(x){
a <- abs(x - min(x))
b <- abs(x -max(x))
c <- ifelse(a < b, a, ifelse(a = 0), 0, b)
return(c)
}
然后是最后一步,使用聚合:
edge_dist <- with(df, aggregate(group, list(gdp), get_dist))
对我哪里出错有什么建议吗?它没有返回我所希望的。
【问题讨论】:
-
在
c的定义中,第一个右括号应该在b之后而不是a = 0之后。 -
你还需要
a==0而不是a=0。 -
伟大的收获,亚历克斯。我仍然得到无意义的输出。
-
谢谢@eipi10。又一个愚蠢的错误。但我仍然得到不正确的输出(只是不同的输出不正确)。
-
你的预期输出是什么