首页 > 解决方案 > 获得与 R 中的两个变量相关的 x 的最大值

问题描述

在我的数据中

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

怎么做?

标签: rdataframedplyr

解决方案


这是使用的解决方案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

推荐阅读