【问题标题】:dplyr summarize grouped data with another columndplyr 用另一列汇总分组数据
【发布时间】:2017-10-24 04:06:44
【问题描述】:

我有一个数据框pop.subset <-

state  location   pop
WA     Seattle    100
WA     Kent       20
OR     foo        30
CA     foo2       80

我需要每个州的人口最少的城市存储在 data.frame 中。 我有:

result <- pop.subset %>% 
          group_by(state) %>%
          summarise(min = min(pop))

这会返回data.frame:

state   min
WA      20
...    .... etc

但我也需要这座城市。我尝试在group_by 函数中包含位置,如下所示:group_by(state, location),但这会给出每个城市与州配对的最小值,而不是像这样与城市配对的州:

state location pop
WA    Seattle  100
WA    Kent     20
foo   foo      foo

我缺少一个简单的解决方案吗?我希望我的结果是这样的:

state location pop
WA    Kent     20
...   ...      ... etc.

【问题讨论】:

  • 您能否编辑此问题以使代码和数据匹配。目前您在数据框中有StateLocationPop,但state(小写's')、location(小写'l')和both_sexes_2012(如何与代码中的Pop?) 相关。
  • 抱歉,我复制了一些旧代码,已修复!

标签: r group-by dplyr data-manipulation summarize


【解决方案1】:

我想你想按state 分组,然后过滤min(pop)

pop.subset %>% 
  group_by(state) %>% 
  filter(pop == min(pop)) %>%
  ungroup()

# A tibble: 3 x 3
  state location   pop
  <chr>    <chr> <int>
1    WA     Kent    20
2    OR      foo    30
3    CA     foo2    80

【讨论】:

  • 你完全正确!谢谢我不知道为什么我没有看到。试图用 summarise 函数使其过于复杂。
  • 使用summarise 似乎很直观,关键是分组。如果您按 A + B 分组,那么摘要是针对 A + B,而不是针对 B。
【解决方案2】:

你尝试过这样的事情吗?

result <- pop.subset %>% 
              group_by(state, location) %>%
              summarise(min = min(both_sexes_2012))

【讨论】:

  • 我试过了,但随后它将州和城市配对在一起,而不是每个州内的最小城市。状态位置弹出。例如。返回 WA, Seattle 100 和 WA, Kent, 20 而不仅仅是 WA, Kent, 20
【解决方案3】:

我明白了,这样就解决了:

library(tibble)

data<-tribble(~state,  ~location,   ~pop,
       "WA",     "Seattle",    100,
       "WA",    "Kent",       20,
       "OR",     "foo" ,       30,
       "CA",     "foo2" ,      80

)

library(dplyr)

data%>%group_by(state)%>%summarise(location=location[which.min(pop)]
                                   ,min=min(pop))


# A tibble: 3 x 3
  state location   min
  <chr>    <chr> <dbl>
1    CA     foo2    80
2    OR      foo    30
3    WA     Kent    20

【讨论】:

  • 这也很棒!
猜你喜欢
  • 1970-01-01
  • 2021-01-20
  • 2018-04-23
  • 2015-07-15
  • 1970-01-01
  • 2017-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多