相交两列不同的长度

Intersecting two columns with different lengths

我有一个包含 5000 user_ids 来自 Twitter 的数据集 1。我想将此数据集中的 user_ids 与另一个包含来自 Twitter 的其他 user_ids 的数据集 2 相交,同时在我的数据集 1 中创建一个新列,其中数据集 1 中的每个 user_id 要么得到得分为“1”(如果相交)或“0”(如果不相交)。我在下面尝试了以下代码,但我只是在新列 'intersect' 中得到一个输出,其中包含一些(随机)零,然后是很多 NA。

for(i in 1:ncol(data1)){
  
  #intersect with other data
  ids_intersect = intersect(data1$user_id, data2$user_id)
  if(length(ids_intersect == 0)){
    data1[i, "intersect"] <- 0 # no intersect
  } else {
    data1[i, "intersect"] <- 1 # intersect
  }
}

我还尝试了另一个代码,我发现它更直观,但是这个代码不起作用,因为两个数据集的行长不同(“替换有 3172 行,数据有 5181”)。但与上述方式相同,此处的意图是在新列 'intersect' 中获得分数 1 'if intersect' 或 0/NA 'if no intersect'。但是我不确定如何在以下代码中实现它:

data$intersect <- intersect(data1$user_id, data2$user_id)

根据是否有 intersect/match 将 1 或 0 分配给新列中的 user_ids 的任何方法?

一个舒适的选择是使用 dplyr 包中的 mutate() 和 Base R %in% 命令,如下所示。

数据

data1 <- data.frame(user_id = c("Test1", 
                                "Test2", 
                                "Test4", 
                                "Test5")) 
data2 <- data.frame(user_id = c("Test1", 
                                "Test3",
                                 "Test4"))

代码

data1 %<>% 
       mutate(Existence = ifelse(user_id %in% data2$user_id, 
                                              1, 
                                              0))

输出

> data1
  user_id Existence
1   Test1         1
2   Test2         0
3   Test4         1
4   Test5         0