在我的数据中
data=structure(list(v1 = c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L),
v2 = c(1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L), x = c(10L,
1L, 2L, 3L, 4L, 3L, 2L, 30L, 3L, 5L)), .Names = c("v1", "v2",
"x"), class = "data.frame", row.names = c(NA, -10L))
有3个变量。 我只需要获得与X具有最大值相关的那些行。 例如。选取v1的第一类别,并查看与哪个类别v2 x具有最大值有关 是
v1=1 and v2=1 x=10
获取v1的第二个类别,并查看与哪个类别v2 x具有最大值有关
是v1=2 ,v2=3 x=30
所需的输出
v1 v2 x
1 1 10
2 3 30
如何做到?
答案 0 :(得分:2)
这是使用data.table
的解决方案:
library(data.table)
setDT(data)
data[, .SD[which.max(x)], keyby = v1]
v1 v2 x
1: 1 1 10
2: 2 3 30
为了完整起见,一个丑陋的base-R解决方案:
t(sapply(split(data, data[["v1"]]), function(s) s[which.max(s[["x"]]),]))
v1 v2 x
1 1 1 10
2 2 3 30
答案 1 :(得分:2)
使用dplyr
:
data %>%
group_by(v1) %>%
filter(x == max(x))
# A tibble: 2 x 3
# Groups: v1 [2]
v1 v2 x
<int> <int> <int>
1 1 1 10
2 2 3 30