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 以表示真假。功能就像
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, data2, 'name', 'name', 'duplicate')
这将创建一个名为duplicate
in的列,data2
其中名称 indf2
也存在于name
of 中df1
,否则为 0。
使用dplyr
上面的语法可以写成:
library(dplyr)
library(rlang)
func <- function(data1, data2, data1col, data2col, newcol) {
data2 %>%
mutate(!!newcol := factor(as.integer(.data[[data2col]] %in%
data1[[data1col]])))
}
推荐阅读
- javascript - ReactJS 代码编译成功,但没有在浏览器上打印
- angular - 使用RouteReuseStrategy时如何停止组件中的计时器?
- node.js - 如何在节点 js 中创建一个在调用时处理一些命令行参数的 api?
- azure - AzureML 上没有库 cv2
- laravel - 如何使用 laravel 5.8 正确配置 sqlite 数据库连接
- count - 无法打印目标工作簿中的计数值
- sql-server - 没有为“sp”的第 1 列指定列名
- python-3.x - 如何在 vtk 文件中编辑点数据
- opengl - 在 OpenGL 中创建两个蒙版图像的“联合”
- java - 我们可以安全地将 `tomcat.addTldSkipPatterns("*.jar")` 用于使用嵌入式 tomcat 的纯后端 Spring Boot 服务