首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将数据拆分为列表,并在每个列表中使用tidyverse操作。

将数据拆分为列表,并在每个列表中使用tidyverse操作。
EN

Stack Overflow用户
提问于 2021-03-26 04:11:59
回答 1查看 54关注 0票数 0

以下是我的数据:

代码语言:javascript
运行
复制
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函数,但是它没有工作。因此,我想问,如果我想在潮间带生态系统中运作,我应该怎么做才能取得预期的结果?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-26 04:41:46

如果您想像以前的数据一样返回完整的数据,有两个选项。

选项-1使用purrr::map_dfr

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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

现在你可以很容易地过滤出一个输出矢量.

代码语言:javascript
运行
复制
(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

如果您想将mapgroup_split结合使用,请这样做

代码语言:javascript
运行
复制
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
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66810950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档