r - 将同一组内的观察值与参考观察值进行比较
问题描述
test <- data.frame('prod_id'= c("shoe", "shoe", "shoe", "shoe", "shoe", "shoe", "boat", "boat","boat","boat","boat","boat"),
'seller_id'= c("a", "b", "c", "d", "e", "f", "a","g", "h", "r", "q", "b"),
'Dich'= c(1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0),
'price' = c(120, 20, 10, 4, 3, 4, 30, 43, 56, 88, 75, 44)
)
test
prod_id seller_id Dich price
1 shoe a 1 120
2 shoe b 0 20
3 shoe c 0 10
4 shoe d 0 4
5 shoe e 0 3
6 shoe f 0 4
7 boat a 0 30
8 boat g 0 43
9 boat h 1 56
10 boat r 0 88
11 boat q 0 75
12 boat b 0 44
因此,我想创建一个新列,根据 Dich 的值获取价格列中观察值之间的差异,其中每个观察值与每个 prod_id 组中 Dich==1 的观察值不同。
下面是我想要的结果。
prod_id seller_id Dich price diff_p
1 shoe a 1 120 0
2 shoe b 0 20 -100
3 shoe c 0 10 -110
4 shoe d 0 4 -116
5 shoe e 0 3 -117
6 shoe f 0 4 -116
7 boat a 0 30 -26
8 boat g 0 43 -13
9 boat h 1 56 0
10 boat r 0 88 32
11 boat q 0 75 19
12 boat b 0 44 -12
解决方案
按 'prod_id' 分组后,取 'price' 和 'price' 的差值,其中 'Dich' 为 1
library(dplyr)
test %>%
group_by(prod_id) %>%
mutate(diff_p = price - price[Dich == 1])
# A tibble: 12 x 5
# Groups: prod_id [2]
# prod_id seller_id Dich price diff_p
# <fct> <fct> <dbl> <dbl> <dbl>
# 1 shoe a 1 120 0
# 2 shoe b 0 20 -100
# 3 shoe c 0 10 -110
# 4 shoe d 0 4 -116
# 5 shoe e 0 3 -117
# 6 shoe f 0 4 -116
# 7 boat a 0 30 -26
# 8 boat g 0 43 -13
# 9 boat h 1 56 0
#10 boat r 0 88 32
#11 boat q 0 75 19
#12 boat b 0 44 -12
或使用data.table
library(data.table)
setDT(test)[, diff_p := price - price[Dich == 1], prod_id]
推荐阅读
- javascript - Chrome 扩展 - 使注入的元素打开包含在扩展中的 html 页面
- php - 在php中下载具有特定名称的文件
- node.js - 删除请求nodejs打字稿
- python - Python for-loop in range not providing desired result
- owl - SHACL 规则中的多路径和存在量化(我应该使用 sh:oneOrMorePath 吗?)
- kotlin - 将 Suspended-function 引用作为另一个函数参数传递
- sql - 非规范化后的成本(%CPU)大致相同?
- javascript - 在函数内设置为 null 时的空数组仍然保持相同的 javascript
- qt - QDomElement::text() 没有子元素文本?
- postgresql - PostgreSQL 命名域的种类