假设我考虑两个表Transaction和account
其中transaction$account_id
包含account$account_id
> transaction
trans_id account_id amount
1 100 500
2 101 200
3 102 100
4 100 600
5 100 700
6 100 900
7 101 1000
8 101 10000
9 102 20000
10 101 5000
> account
account_id Total.amnt notrans transavg
100 2700 4 675
101 16200 4 4050
102 20100 2 10050
现在我的问题是,如何查找amount
表格中的transaction
是否大于transavg
表中每个account
的{{1}}。
并将其存储在变量中,如果大于account_id
,则因子为1;如果小于transavg
则为0。我需要使用哪些包。
答案 0 :(得分:4)
我们可以使用match
来比较account_id
,然后从amount
表中获取相应的account
,然后将其与amount
进行比较transaction
1}}表。这将返回一个布尔输出,可以使用as.integer
将其转换为整数。
transaction$flag <- as.integer(transaction$amount >
account$transavg[match(transaction$account_id, account$account_id)])
transaction
# trans_id account_id amount flag
#1 1 100 500 0
#2 2 101 200 0
#3 3 102 100 0
#4 4 100 600 0
#5 5 100 700 1
#6 6 100 900 1
#7 7 101 1000 0
#8 8 101 10000 1
#9 9 102 20000 1
#10 10 101 5000 1
答案 1 :(得分:2)
我们可以使用data.table
的非等连接。转换&#39; data.frame&#39;到&#39; data.table&#39; (setDT(transaction)
),创建&#39;标记&#39;为0,加入&#39; amount&#39; on
&#39; account_id&#39;和amount > transavg
,并指定(:=
)&#39;标记&#39;为1。
library(data.table)
setDT(transaction)[, flag := 0][amount, flag := 1, on =.(account_id, amount > transavg)]
transaction
# trans_id account_id amount flag
# 1: 1 100 500 0
# 2: 2 101 200 0
# 3: 3 102 100 0
# 4: 4 100 600 0
# 5: 5 100 700 1
# 6: 6 100 900 1
# 7: 7 101 1000 0
# 8: 8 101 10000 1
# 9: 9 102 20000 1
#10: 10 101 5000 1