繁体   English   中英

我们如何在R中的两个表之间执行条件检查

[英]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

现在的问题是,如何寻找是否amounttransaction表大于transavgaccount表中的每个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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM