【问题标题】:Trying to extract the max value from different groups in a dataframe [duplicate]尝试从数据框中的不同组中提取最大值[重复]
【发布时间】:2020-11-11 03:50:12
【问题描述】:

我有一个数据框 (top_lang),其中包含国家列表 (country)、每个国家/地区使用的不同语言 (lang) 以及每个国家/地区使用每种语言 (langCountryPop) 的人数。我有每个国家/地区降序排列的 langCountryPop 列,我想提取每个国家/地区的最大数字。

这是我的数据样本:

我想要的示例输出是:

x = data.frame("country"= c("American Samoa", "Andorra"), "lang" = c("Samoan", "Catalan"), "langCountryPop" = c(56700, 31000))

但对我数据集中的所有国家/地区重复。

我的尝试是:

top_lang %>% select(country, lang, langCountryPop) %>% arrange(country, max(langCountryPop))

但这并不仅仅输出最高的口语。是否有一个函数可以提取组内的最大值/是否有另一种方法可以做到这一点? 谢谢!

【问题讨论】:

  • top_lang %>% select(country, lang, langCountryPop) %>% group_by(country) %>% filter(langCountryPop==max(langCountryPop)) 可以帮忙!

标签: r dataframe groupwise-maximum


【解决方案1】:

这里有两个dplyr解决方案:

数据:

df = data.frame("country"= c("American Samoa", "American Samoa", "American Samoa", "Andorra", "Andorra", "Andorra"), 
               "lang" = c("Samoan", "Japanese", "English", "Catalan", "Spanish", "French"), 
               "langCountryPop" = c(56700, 1500, 1234, 31000, 24600, 2400))

第一个解决方案:

这利用了这样一个事实,正如您所说,langCountryPopvalues 已经按降序排序,因此您知道每个组的第一个值最大值。您可以使用slice 对该值的数据框进行子集化:

library(dplyr)
df %>% 
  group_by(country) %>% 
  slice(1) 

另一种解决方案是 filtering 出maximum langCountryPop 值每组:

library(dplyr)
df %>% group_by(country) %>% filter(langCountryPop == max(langCountryPop))

任一方法的结果:

# A tibble: 2 x 3
# Groups:   country [2]
  country        lang    langCountryPop
  <chr>          <chr>            <dbl>
1 American Samoa Samoan           56700
2 Andorra        Catalan          31000

【讨论】:

    猜你喜欢
    • 2014-10-08
    • 2017-11-02
    • 2018-10-10
    • 1970-01-01
    • 2022-01-17
    • 2021-08-08
    • 1970-01-01
    • 2019-11-08
    • 2020-07-13
    相关资源
    最近更新 更多