如何找到数据框中的内容而不是 R 中的其他内容
how to find what is in data frame and not another in R
我有两个数据框:codes 和 supply。
代码(如下所示)由四个字段组成:state、codetype、code、codetitle
supply 有 12 列,但其中三列是 state、codetype 和 code
下面是一个例子
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,codetype,code))
我的问题是如何找到 supply1 而不是 codes1 中的状态、代码类型、代码的哪些组合。我会使用 excel 和匹配函数来执行此操作,但是有 190 万行并且超出了 Excel.
的容量
查看了有关反连接的文档。但是,由于没有ID等公共字段,有点困惑。
整洁宇宙
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, by = c("state", "codetype", "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
(和某些列 clean-up)
备选碱基 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, paste(state, codetype, code, 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
,我们在将 'supply' 转换为 data.table
(setDT
) 后连接 on
列。通过否定 (!
),我们检查 'codes' 数据集
中不匹配的元素
library(data.table)
setDT(supply)[!codes, on = c("state", "codetype", "code")]
我有两个数据框:codes 和 supply。 代码(如下所示)由四个字段组成:state、codetype、code、codetitle supply 有 12 列,但其中三列是 state、codetype 和 code
下面是一个例子
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,codetype,code))
我的问题是如何找到 supply1 而不是 codes1 中的状态、代码类型、代码的哪些组合。我会使用 excel 和匹配函数来执行此操作,但是有 190 万行并且超出了 Excel.
的容量查看了有关反连接的文档。但是,由于没有ID等公共字段,有点困惑。
整洁宇宙
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, by = c("state", "codetype", "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
(和某些列 clean-up)
备选碱基 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, paste(state, codetype, code, 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
,我们在将 'supply' 转换为 data.table
(setDT
) 后连接 on
列。通过否定 (!
),我们检查 'codes' 数据集
library(data.table)
setDT(supply)[!codes, on = c("state", "codetype", "code")]