r - 如何根据单独数据框中两列的结果在数据框中创建新列?
问题描述
我有一个df1:
ZIP Weekend Sales
1 60657 1 2
2 60657 1 1
3 60657 1 1
4 60641 0 2
5 60641 0 NA
6 60607 0 0
7 60607 0 1
8 60628 0 1
还有一个单独的df2:
ZCTA ZIP Population
6 60657 60657 82739
7 60609 60609 64906
10 60612 60612 33472
13 60641 60641 40603
14 60616 60616 48433
15 60607 60607 84155
16 60628 60628 92084
17 60619 60619 63825
我想为 df2 增加两列。一列将是 SalesSum。我想总结每个邮政编码的总销售分数,如下所示:
输出:
ZCTA ZIP Population Sales
6 60657 60657 82739 4
7 60609 60609 64906 0
10 60612 60612 33472 0
13 60641 60641 40603 2
14 60616 60616 48433 0
15 60607 60607 84155 1
16 60628 60628 92084 1
17 60619 60619 63825 0
这是怎么做到的?
解决方案
我提出这个答案有点tidyverse
:
df <- read.table("df1.txt")
df2 <- read.table("df2.txt")
library(tidyverse)
#aggregate by ZIP
tt <- df %>% group_by(ZIP) %>% summarise(Sales = sum(Sales))
tt
# create the new column
df2$Sales <- 0
# add values at the right place
df2[match(tt$ZIP, df2$ZIP), ]$Sales <- tt$Sales
###### a more tidyverse version (Mike idea) #####
df2 <- left_join(df2, tt, by = "ZIP")
# to supress NA without tidy
df2$Sales[is.na(df2$Sales)] = 0
df2:
ZCTA ZIP Population Sales
6 60657 60657 82739 4
7 60609 60609 64906 0
10 60612 60612 33472 0
13 60641 60641 40603 2
14 60616 60616 48433 0
15 60607 60607 84155 1
16 60628 60628 92084 1
17 60619 60619 63825 0
推荐阅读
- c++ - 为什么这个 C++ 布尔值返回 false
- tensorflow - Tensorflow:用每行中给定数量的元素重塑一维张量
- python - 获取静态文件的 'GET /static/css/base.css HTTP/1.1" 404 1795' 错误
- macos - 在osx中的多个监视器之间切换光标聚焦
- image - 如何在 shopify 中将特定产品图像设置为备用/悬停图像?
- circleci - CircleCI Parallelism 合并通知
- python-3.x - UnicodeDecodeError:“utf-8”编解码器无法解码位置 4 中的字节 0xb3:无效的起始字节
- data-visualization - AWS QuickSight 显示具有多个维度计数的条形图/直方图。换句话说,是否可以只用 3 个小节制作一个 bar grpah?
- xml - XPath 如何处理扩展名称冲突的属性?
- scala - 当代码库中存在可变参数时,scalafix 自动修复插件错误“错误:此处不允许重复参数”