【问题标题】:Value based on largest value by neighbouring column基于相邻列的最大值的值
【发布时间】:2019-08-05 19:30:24
【问题描述】:

使用group_by()我想根据value2列的最大值得到value列的值:

df = data.frame(id = c(1,1,1,1,2,2,2,2),
                value = c(4,5,1,3,1,2,3,1),
                value2 = c("a","b","c","d","e","f","g","h"))

df %>% group_by(id) %>%
   sumarise(value2_of_largest_value = f(value, value2))

1  b
2  g

【问题讨论】:

  • df %>% group_by(id) %>% summarise(value2 = value2[which.max(value)])

标签: r dplyr


【解决方案1】:

我们可以使用which.max 来获取value 的索引并使用它来子集value2

library(dplyr)
f1 <- function(x, y) y[which.max(x)]
df %>%
   group_by(id) %>%
   summarise(value2 = f1(value, value2))
   #or simply
   # summarise(value2 = value2[which.max(value)]) 
# A tibble: 2 x 2
#     id value2
#  <dbl> <fct> 
#1     1 b     
#2     2 g     

【讨论】:

    【解决方案2】:

    dplyr中的另一种方法:

    library(dplyr)
    
     df1 %>% 
      group_by(id) %>% 
      filter(value == max(value))
    

    data.table:

    library(data.table)
    
    setDT(df1)[setDT(df1)[, .I[value == max(value)], by=id]$V1]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-30
      • 2020-02-16
      相关资源
      最近更新 更多