在来自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
答案 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;