R-查找来自不同数据框的匹配行

时间:2018-12-06 10:41:04

标签: r dataframe

我有一个带有借记或贷记记录的数据框。贷方记录在借方处有完全匹配的记录。我需要从数据框中删除贷方和链接的借方记录。

问题是记录不是唯一的,所以我不想删除所有匹配的记录,只是一个。 (因此无法进行反连接)。行中的值是完全匹配的,并且它们具有相同的列。

我的方法是将数据框拆分为“借方”数据框(ddc)和“贷方”数据框(dcc)。现在循环遍历贷方数据帧的每一行,并在借方数据帧中找到匹配的行并将其删除。请注意,它们必须按几列进行匹配。

当我尝试使用匹配功能时,它会不断计算,并且我觉得它不起作用。 我现在尝试的是:

ddc <- ddc[!(ddc[match(dcc[1,],ddc),]),]

我的目标是:

for(i in 1:nrow(dcc)){
ddc <- ddc[!(ddc[match(dcc[i,],ddc),]),]
}

结果应为借方数据帧,其中贷方数据帧的每一行都将被删除。 因此,如果ddc有10行,而dcc有2行,则新的dc将有8行。

任何帮助将不胜感激!

示例数据:

dcc               ddc                    new ddc

x1 x2 x3 x4 x5     x1  x2  x3  x4  x5     x1  x2  x3  x4  x5
1  2  3  5  6      1   2   2   3   5      1    2   2   3   5
1  3  2  3  5      1   2   3   3   3      1    2   3   3   3 
1  2  3  5  6      1   2   2   3   5      1    2   2   3   5
1  5  6  7  3      1   5   5   2   3      1    5   5   2   3 
                   1   3   2   3   5      1    3   2   3   5
                   1   2   3   5   6
                   1   3   2   3   5
                   1   5   6   7   3

1 个答案:

答案 0 :(得分:0)

我将像上面的评论中提到的Jonny Phelps一样使用anti_join,但是我首先要添加某种排名列以确保我保留重复项,这是我的建议:< / p>

# read the data
dcc <- read.table(text = 'x1 x2 x3 x4 x5    
1  2  3  5  6      
1  3  2  3  5      
1  2  3  5  6      
1  5  6  7  3 ', header = TRUE)

ddc <- read.table(text = 'x1  x2  x3  x4  x5     
1   2   2   3   5     
1   2   3   3   3      
1   2   2   3   5      
1   5   5   2   3      
1   3   2   3   5      
1   2   3   5   6
1   3   2   3   5
1   5   6   7   3', header = TRUE)

# Add the ranking column in ddc
ddc <- ddc %>% 
  group_by_all() %>% 
  mutate(rank_row = row_number()) %>% 
  ungroup()
# Add a dummy ranking column in dcc, which is always = 1
dcc <- dcc %>% mutate(rank_row = 1)

# and now the anti_join by = c("x1", "x2", "x3", "x4", "x5", "rank_row") or by = names(ddc)
anti_join(ddc, dcc, by = names(ddc))
相关问题