【发布时间】:2016-12-13 14:17:11
【问题描述】:
我想按组过滤,即基于给定列顺序的值的最大组合。
列向量应指定查看最大值的列的顺序。
例如:
x <- data.frame(id = c("a", "a", "b", "b"),
x = c(1, 1, 1, 2),
y = c(1, 2, 2, 1),
z = c(1, 1, 2, 1))
> x
id x y z
1 a 1 1 1
2 a 1 2 1
3 b 1 2 2
4 b 2 1 1
在此示例中,我想按id 分组并将“优先级”设置为x, y, z,这意味着我想查看最大x 值,然后它与最大y 值相关联,然后是最大z 值是最大x, y 对。
我不知道这样的矢量化函数,所以我递归分组以找到最大的以下列最大值:
> x
id x y z
1 a 1 2 1
2 b 2 1 1
我可以用基础 R 做一个循环:
group <- "id"
cols <- c("x", "y", "z")
for (i in seq_along(cols)) {
tmp <- aggregate(setNames(list(x[[cols[i]]]), cols[i]), by = as.list(x[group]), FUN = max)
x <- merge(x, tmp, by = c(group, cols[i]))
group <- c(group, cols[i])
}
x <- x[!duplicated(x), ]
> x
id x y z
1 a 1 2 1
2 b 2 1 1
我想将其应用于大量数据,因此此代码在某些时候会遇到困难。您有什么想法可以改进吗?
感谢您的帮助!
【问题讨论】:
标签: r