根据R

时间:2018-10-03 08:57:16

标签: r dataframe dplyr

在我的数据中

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

如何做到?

2 个答案:

答案 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