0

我有一个数据框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.
4

3 回答 3

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
于 2017-10-24T04:28:41.610 回答
0

我明白了,这解决了它:

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
于 2017-10-24T04:30:56.650 回答
0

你尝试过这样的事情吗?

result <- pop.subset %>% 
              group_by(state, location) %>%
              summarise(min = min(both_sexes_2012))
于 2017-10-24T04:10:32.573 回答