【问题标题】:get max value of x in relation of two variables in R [duplicate]获得与R中的两个变量相关的x的最大值[重复]
【发布时间】:2019-03-08 11:06:01
【问题描述】:

在我的数据中

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

怎么做?

【问题讨论】:

  • 你需要library(dplyr); data %>% group_by(v1) %>% slice(which.max(x)) 吗?

标签: r dataframe dplyr


【解决方案1】:

这是使用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

【讨论】:

    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2014-06-15
      • 2018-10-15
      • 1970-01-01
      • 2013-10-26
      • 2018-02-15
      • 2020-03-01
      • 1970-01-01
      • 2020-03-15
      • 1970-01-01
      相关资源
      最近更新 更多