使两个长度不同的柱相交

  • 本文关键字:两个 match intersect userid
  • 更新时间 :
  • 英文 :


我有一个数据集1,其中包含来自Twitter的5000个user_id。我想将该数据集中的user_id与另一个数据集2相交,该数据集2包含来自Twitter的其他user_id,同时在我的数据集1中创建一个新列,其中数据集1的每个user_id要么得到分数"1"(如果相交(,要么得到得分"0"(如果没有相交(。我尝试了下面的代码,但我只是在新列中得到了一个输出,它与一些(随机(零"相交",然后是很多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分,"如果没有交集"可以获得0/NA分。然而,我不确定如何在以下代码中实现它:

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

根据是否存在交集/匹配,是否可以将1或0分配给新列中的user_id?

一个舒适的选项是将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

最新更新