我有两个data.table
是这样的:
tests
id | test | score
=================
1 | 1 | 90
1 | 2 | 100
2 | 1 | 70
2 | 2 | 80
3 | 1 | 100
3 | 2 | 95
cheaters
id | test | score
=================
1 | 2 | 100
3 | 1 | 100
3 | 2 | 95
假设我现在想在all_scores中包含一个布尔列来判断该特定测试是否被欺骗,因此输出将如下:
tests
id | test | score | cheat
=========================
1 | 1 | 90 | FALSE
1 | 2 | 100 | TRUE
2 | 1 | 70 | FALSE
2 | 2 | 80 | FALSE
3 | 1 | 100 | TRUE
3 | 2 | 95 | TRUE
有一种简单的方法吗?这些表格是id
和test
。
答案 0 :(得分:7)
创建初始值为cheat
的{{1}}列,然后加入作弊者,并在匹配时将FALSE
列更新为cheat
:
TRUE
或者,如果不设置密钥,请使用library(data.table)
setkey(setDT(tests), id, test)
setkey(setDT(cheaters), id, test)
tests[, cheat := FALSE][cheaters, cheat := TRUE]
tests
# id test score cheat
#1: 1 1 90 FALSE
#2: 1 2 100 TRUE
#3: 2 1 70 FALSE
#4: 2 2 80 FALSE
#5: 3 1 100 TRUE
#6: 3 2 95 TRUE
参数指定要加入的列:
on