r-变异数据帧以检查两个数据帧之间的数据是否重复



我有两个数据帧,这只是一个示例,数据库有大约100万条记录。可以有姓名、电子邮件、字母数字代码等

data1<-data.frame(
'ID 1' = c(86364,"ARV_2612","AGH_2212","IND_2622","CHG_2622"),
sector = c(3,3,1,2,5),
name=c("nhug","hugy","mjuk","ghtr","kuld"),
'Enternal code'=c(1,1,1,1,3),
col3=c(1,1,0,0,0),
col4=c(1,0,0,0,0),
col5=c(1,0,1,1,1)
)
data2<-data.frame(
'ID 1' = c(53265,"ARV_7362",76354,"IND_2622","CHG_9762"),
sector = c(3,3,1,2,5),
name=c("nhug","hugy","mjuk","ghtr","kuld"),
'Enternal code'=c(1,1,1,1,3),
col3=c(1,1,0,0,0),
col4=c(1,0,0,0,0),
col5=c(1,0,1,1,1)
)
data2 %>% mutate(
duplicated = factor(if_else(`ID 1` %in% 
pull(data1, `ID 1`),
1, 
0)))

现在我正在寻找一个函数来改变我的一个数据帧(data2(。如果我给出data1和data2的列名,以查找值或字符串是否已经存在于其他数据中,并将一个新列更改为1.0以表示true和false。功能类似

func(data1="名称",data2="名称"、mutated_com="名称存在"(

在基本R中,您可以将此函数写成:

func <- function(data1, data2, data1col, data2col, newcol) {
data2[[newcol]] <- factor(as.integer(data2[[data2col]] %in% data1[[data1col]]))
data2
}

可以称之为:

func(data1, data2, 'name', 'name', 'duplicate')

这将在data2中创建一个名为duplicate的列,给出1,其中df2中的名称也存在于df1name中,否则为0。


使用dplyr语法,上述内容可以写成:

library(dplyr)
library(rlang)
func <- function(data1, data2, data1col, data2col, newcol) {
data2 %>% 
mutate(!!newcol := factor(as.integer(.data[[data2col]] %in% 
data1[[data1col]])))
}

您可以使用inner_join(来自dplyr(来确定两个数据帧之间的重叠。若要使用所有列(如果两个数据帧具有相同的列名(,则不必指定"by"参数。

然后,您可以添加一个列"duplicate"并连接回原始数据帧(df1或df2(,以获得所需的结果。

overlap <- data1 %>% 
inner_join(data2) %>% 
mutate(duplicated = 1)
data1 %>% #or data2
left_join(overlap) %>% 
mutate(duplicated = ifelse(is.na(duplicated),0,1))

最新更新