以下是我的数据:
structure(list(region = c("global", "global", "global", "africa",
"africa", "africa", "asia", "asia", "asia"), disease = c("hear",
"lung", "ear", "hear", "lung", "ear", "hear", "lung", "ear"),
number = c(20L, 22L, 40L, 14L, 12L, 16L, 15L, 18L, 10L)), class = "data.frame", row.names = c(NA,
-9L))
我希望获得每个地区的肺病人数的排名。我想要的结果应该是一个病媒c(2,3,1),因为在全球三种疾病中,肺部疾病的数量排在第二位,在非洲的三种疾病中排在第三位,在亚洲的三种疾病中排名第一。
我使用group_split
创建单独的列表,但未能在每个列表中进行进一步的计算。我尝试了map
函数,但是它没有工作。因此,我想问,如果我想在潮间带生态系统中运作,我应该怎么做才能取得预期的结果?
谢谢。
发布于 2021-03-26 04:41:46
如果您想像以前的数据一样返回完整的数据,有两个选项。
选项-1使用purrr::map_dfr
的
map_dfr((df %>% group_split(region)), ~ (as.data.frame(.) %>% mutate(rank = dense_rank(number))))
region disease number rank
1 africa hear 14 2
2 africa lung 12 1
3 africa ear 16 3
4 asia hear 15 2
5 asia lung 18 3
6 asia ear 10 1
7 global hear 20 1
8 global lung 22 2
9 global ear 40 3
选项-2只使用dplyr
df %>% group_by(region) %>% mutate(rank = dense_rank(number))
# A tibble: 9 x 4
# Groups: region [3]
region disease number rank
<chr> <chr> <int> <int>
1 global hear 20 1
2 global lung 22 2
3 global ear 40 3
4 africa hear 14 2
5 africa lung 12 1
6 africa ear 16 3
7 asia hear 15 2
8 asia lung 18 3
9 asia ear 10 1
现在你可以很容易地过滤出一个输出矢量.
(df %>% group_by(region) %>% mutate(rank = dense_rank(number)))[which(df$disease == "lung"), "rank"]
# A tibble: 3 x 1
rank
<int>
1 2
2 1
3 3
如果您想将map
与group_split
结合使用,请这样做
map_dfr((df %>% group_split(region)), ~ (as.data.frame(.) %>% mutate(rank = dense_rank(number)) %>% filter(disease == "lung") %>%
select(region, rank)))
region rank
1 africa 1
2 asia 3
3 global 2
https://stackoverflow.com/questions/66810950
复制相似问题