如何解决如何找到数据帧中的内容,而不是R中的其他内容
我有两个数据框:代码和电源。 代码(如下所示)由四个字段组成:状态,代码类型,代码,代码标题 供应具有12列,但其中三列是状态,代码类型和代码
下面是一个例子
state codetype code codetitle
32 15 123456 Something
32 15 123455 Something Else
32 10 123455 Something Else
从那里,我使用以下代码来连接项目
supply1<- supply%>%mutate(supply1= paste0(state,codetype,code))
codes1<- codes%>%mutate(codes1= paste0(state,code))
我的问题是我如何找出状态1,代码类型,代码中的哪些组合在供应1中而不在代码1中。我会使用excel和match函数来执行此操作,但是有190万行,超出了Excel的容量。
已经查看了有关抗连接的文档。但是,由于没有通用字段(例如ID),所以会感到困惑。
解决方法
tidyverse
library(dplyr)
anti_join(supply,codes,by = c("state","codetype","code"))
# state codetype code codetitle
# 1 34 15 123459 Something_4
基本R
codes$code_rn <- seq_len(nrow(codes))
supply$supply_rn <- seq_len(nrow(supply))
temp <- merge(codes,supply,"code"))
temp
# state codetype code codetitle.x code_rn codetitle.y supply_rn
# 1 32 15 123455 Something_Else 2 Something_3 2
# 2 32 15 123456 Something 1 Something_2 1
supply[ !supply$supply_rn %in% temp$supply_rn,]
# state codetype code codetitle supply_rn
# 3 34 15 123459 Something_4 3
(以及一些列清理)
替代碱基R
这实际上是您开始的目的:
supply_id <- with(supply,paste(state,codetype,code,sep = "|"))
supply_id
# [1] "32 15 123456" "32 15 123455" "34 15 123459"
codes_id <- with(codes,sep = "|"))
codes_in
# [1] "32|15|123456" "32|15|123455" "32|10|123455"
supply[!supply_id %in% codes_id,]
# state codetype code codetitle supply_rn
# 3 34 15 123459 Something_4 3
数据
codes <- read.table(header = TRUE,text="
state codetype code codetitle
32 15 123456 Something
32 15 123455 Something_Else
32 10 123455 Something_Else")
supply <- read.table(header = TRUE,text="
state codetype code codetitle
32 15 123456 Something_2
32 15 123455 Something_3
34 15 123459 Something_4")
,
使用data.table
,在将“供应”转换为on
(data.table
)之后,我们将列setDT
连接起来。通过否定(!
,我们检查“代码”数据集中不匹配的元素
library(data.table)
setDT(supply)[!codes,on = c("state","code")]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。