首页 > 解决方案 > 如果包含字符串,则按一列分组并获取 R 中另一列的最大值

问题描述

给定如下数据框:

df <- structure(list(city = structure(c(1L, 1L, 2L, 2L, 1L, 1L, 1L, 
1L), .Label = c("bj", "sh"), class = "factor"), type = structure(c(3L, 
1L, 3L, 1L, 4L, 2L, 4L, 2L), .Label = c("buy_area", "buy_price", 
"sale_area", "sale_price"), class = "factor"), value = c(1200L, 
800L, 1900L, 1500L, 15L, 10L, 17L, 9L)), class = "data.frame", row.names = c(NA, 
-8L))

出去:

在此处输入图像描述

如何从:和分别包含value的 2 种类型的列中获取最大值。typeareaprice

预期结果将是两个值:1900对于area17for price

要分组type并获得最大的values 我们可以使用:

ddply(df, .(variable), summarise, max.value = max(value))

更新: @det 解决方案的输出:

在此处输入图像描述

标签: rdplyrtidyverseplyr

解决方案


创建分类type为区域或价格的列并按该列分组:

df %>%
  mutate(
    type2 = case_when(
      str_detect(type, "_area$") ~ "area",
      str_detect(type, "_price$") ~ "price",
      TRUE ~ NA_character_
    )
  ) %>%
  group_by(type2) %>%
  summarise(max_value = max(value))

输出:

  type2 max_value
  <chr>     <int>
1 area       1900
2 price        17

推荐阅读