【发布时间】:2016-11-25 17:36:01
【问题描述】:
我承认问题的标题有点神秘,但请耐心等待。我有两张数据表,一张很小,一张很大,其中包含无用的信息。
第一个数据集(dt1)的格式如下:
CG MG1 MG2
1: 49693 914569 4417756
2: 50422 22514 31343
3: 90543 90544 4531361
4: 142864 143471 143806
5: 386093 2149 4149104
6: 2674708 23921 24327
所以它只包含数字,其中一些可以在第二个数据表中找到。第二个数据表 (dt2) 包含许多字段,但我需要的是 ID。
ID
1: 49693
2: 49693
3: 49693
4: 49693
5: 49693
6: 2674708
7: 2679818
8: 2680618
9: 49693
10: 2695042
我要做的是在 dt1 中再添加 3 列,每列指定 dt2 中是否有超过 5 行 ID 分别等于 CG1、MG1、MG2。我的最终结果是这样的:
CG MG1 MG2 CG_OK MG1_OK MG2_OK
1: 49693 914569 4417756 1 0 0
2: 50422 22514 31343 0 0 0
3: 90543 90544 4531361 0 0 0
4: 142864 143471 143806 0 0 0
5: 386093 2149 4149104 0 0 0
6: 2674708 23921 24327 0 0 0
CG_OK 中有一个 1,因为对于 CG 49693,我们可以在 dt2 中找到 6 行具有相同 ID。
实现我的结果的方法:子集 dt2 仅包含可以在 CG、MG1 和 MG2 中找到的值,然后计算每个行的行数,然后以某种方式合并回来。
我的问题是,有没有更好的(或者在代码方面更短)的方法?类似的东西(我知道不工作):
dt1[, CG_OK := ifelse(nrow(dt2[ID == CG]) > 5, 1, 0)]
【问题讨论】:
标签: r data.table