[英]R - How can we delete rows based on logical argument between two columns value
[英]How can we perform condition checking between two tables in R
假设,如果我考虑两个表和交易帐户, 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
表中的每个account_id
。
并将其与因素1,如果大于存储在变量transavg
和0,如果比较小transavg
。 以及我需要使用哪些软件包。
我们可以使用match
比较account_id
,然后从account
表中获取相应的amount
,然后将其与transaction
表中的amount
进行比较。 这将返回一个布尔输出,可以使用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
我们可以对data.table
使用非data.table
。 将'data.frame'转换为'data.table'( setDT(transaction)
),将'flag'创建为0, on
'account_id' on
添加'amount'并输入amount > transavg
,并分配( :=
)'flag '为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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.