微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

更改数据帧以检查两个数据帧之间的数据是否重复

如何解决更改数据帧以检查两个数据帧之间的数据是否重复

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

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,3),col3=c(1,0),col4=c(1,col5=c(1,1)
)

data2<-data.frame(
  'ID 1' = c(53265,"ARV_7362",76354,"CHG_9762"),1)
)
data2 %>% mutate(
  duplicated = factor(if_else(`ID 1` %in% 
                                pull(data1,`ID 1`),0)))

现在我正在寻找一种函数来像这样改变我的一个数据帧(data2)。如果我给出data1和data2的列名,以查找其他数据中是否已存在值或字符串,并将新列更改为1,0,则为true和false。 功能就像

func(data1 =“ name”,data2 =“ name”,mutated_com =“ name_exist”)

解决方法

在基数R中,您可以将该函数编写为:

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

并可以将其称为:

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

这将在duplicate中创建一个名为data2的列,给出1,其中df2中的名称也出现在name的{​​{1}}中,否则为0。


使用df1语法可以将以上内容写为:

dplyr
,

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

然后您可以添加一列“重复的”并连接回原始数据框(df1或df2)以获得所需的结果。

overlap <- data1 %>% 
  inner_join(data2) %>% 
  mutate(duplicated = 1)

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。