按人口划分个案

时间:2017-08-20 07:40:16

标签: r tidyr

在来自tidyr包的table2数据集中,我们有:

  country  year       type      count
         <chr> <int>      <chr>      <int>
 1 Afghanistan  1999      cases        745
 2 Afghanistan  1999 population   19987071
 3 Afghanistan  2000      cases       2666
 4 Afghanistan  2000 population   20595360
 5      Brazil  1999      cases      37737
 6      Brazil  1999 population  172006362
 7      Brazil  2000      cases      80488
 8      Brazil  2000 population  174504898
 9       China  1999      cases     212258
10       China  1999 population 1272915272
11       China  2000      cases     213766
12       China  2000 population 1280428583

如何对此进行编码,以便我可以按类型填充类型案例然后再乘以10000.(是的,这是Hadley Wickham从R for Data Science获得的一个问题。)

我想到了:

sum_1 <- vector()
for (i,j in 1:nrow(table2)) {
  if (i %% 2 != 0) {
    sum_1 <- (table2[i] / table2[j]) * 10000

1 个答案:

答案 0 :(得分:1)

假设&#39;类型&#39;只有2个值。对于每个国家/地区&#39;年份&#39;,然后按&#39; country&#39;,&#39; year&#39;,arrange按&#分组39;类型&#39; (如果订单不同)并将first值除以&#39; count&#39;使用last值&#39; count&#39;创建&#39; newcol&#39;

library(dplyr)
table2 %>%
    group_by(country, year) %>%
    arrange(country, year, type) %>% 
    mutate(newcol = 10000*first(count)/last(count))

如果我们只需要汇总输出,请将mutate替换为summarise

如果type中除了&#39;案例&#39;之外还有其他值。和&#39;人口&#39;然后我们将&#39; count&#39;基于逻辑索引

table2 %>% 
   group_by(country, year) %>% 
   mutate(newcol = 10000*count[type=="cases"]/count[type=="population"])

这里,假设只有一个案例&#39;和#&#39;人口&#39;每个国家/地区&#39;年份&#39;