我有一个数据集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