R 地理空间聚合:在不使用 Forloop 的情况下折叠方向性(删除重复项)
R Geospatial Aggregation: Collapsing Directionality without Using Forloop (Remove Duplicates)
我正在尝试对包含方向性信息的地理空间数据执行聚合(基本总和)。我正在尝试折叠方向性维度。因此,如果 A -> B 和 B -> A,则两者都计算在内。
我有以下数据:
u <- data.frame(str_statn=c(42, 106, 3, 6, 4), end_statn=c(106, 42, 6, 3, 14), cnt=c(23, 7, 100, 102, 1))
我需要让它看起来像这样:
v <- data.frame(str_statn=c(42, 3, 4), end_statn=c(106, 6, 14), cnt=c(30, 202, 1))
我知道我可以使用 for 循环,但我一直在寻找更优雅、更快速的解决方案。任何帮助,将不胜感激。谢谢!
您可能必须先按行排序,然后简单地聚合,这是一个可能的解决方案
u[1:2] <- t(apply(u, 1, function(x) sort(x[1:2])))
aggregate(cnt ~., u, sum)
# str_statn end_statn cnt
# 1 42 106 30
# 2 3 6 202
# 3 4 14 1
我正在尝试对包含方向性信息的地理空间数据执行聚合(基本总和)。我正在尝试折叠方向性维度。因此,如果 A -> B 和 B -> A,则两者都计算在内。
我有以下数据:
u <- data.frame(str_statn=c(42, 106, 3, 6, 4), end_statn=c(106, 42, 6, 3, 14), cnt=c(23, 7, 100, 102, 1))
我需要让它看起来像这样:
v <- data.frame(str_statn=c(42, 3, 4), end_statn=c(106, 6, 14), cnt=c(30, 202, 1))
我知道我可以使用 for 循环,但我一直在寻找更优雅、更快速的解决方案。任何帮助,将不胜感激。谢谢!
您可能必须先按行排序,然后简单地聚合,这是一个可能的解决方案
u[1:2] <- t(apply(u, 1, function(x) sort(x[1:2])))
aggregate(cnt ~., u, sum)
# str_statn end_statn cnt
# 1 42 106 30
# 2 3 6 202
# 3 4 14 1