与 R 数据表合并时避免回收

数据挖掘 r
2022-02-26 18:26:08

我得到了tableA,其中包含一个数字变量CdTaller(例如 1948675)。

我也得到了tableB,其中包含两个变量:(Id例如 2513978)和Name(例如“JOSE MANUEL PEREZ”)

我想在 , 中添加一个新列tableAName_Taller其中包含与 的变量CdTaller相对应的列的名称,因此我执行以下操作:IdtableB

tableA[, Name_Taller := tableB[Id==tableA\$CdTaller]$Name]

但是,对于那些不在 中的CdTallerR 循环使用新变量tableAtableBName_Taller

Warning message:
In \`[.data.table\`(tableA, , \`:=\`(Name, tableB[Id ==  :
  Supplied 867324 items to be assigned to 947871 items of column 'Name'
  (recycled leaving remainder of 80547 items).

所以对于在tableA$CdTaller == '1320402'中找不到的,由于这种回收tableB,R 仍然添加了一个Name_Taller实际上对应于的 。CdTaller == '4430219'

问题是:我怎样才能避免这种回收,以便 R 只NA向那些包含CdTallernot found in的行添加一个或空字符串tableB数据表中是否有任何参数可以用于此目的?

1个回答

您想要做的是join类似此处记录的行为: 加入其他

为了让这里的东西可读,一个版本dplyr

ex1 <- data.frame(id = 1:10, name = replicate(10, paste(sample(letters[1:5], size = 2), collapse = "")))

ex2 <- data.frame(otherinfo = (1:5)+50, othername = replicate(5, paste(sample(letters[1:5], size = 2), collapse = "")))

dplyr::left_join(ex1, ex2, by = c(name = "othername"))

   id name otherinfo
1   1   ac        NA
2   2   ac        NA
3   3   ab        NA
4   4   da        53
5   5   ab        NA
6   6   cb        NA
7   7   eb        NA
8   8   de        NA
9   9   ad        NA
10 10   ec        52