R语言 从数据框中排除不匹配的字符串

kokeuurv  于 2023-05-26  发布在  其他
关注(0)|答案(1)|浏览(125)

我有两个 Dataframe DFADFB,它们具有公共ID列ID3。我想确定DFA中存在但DFB中缺少的ID 3。然后我想合并DFA和DFB在一起,但只保留共同的ID 3。
DFA:
| 时间|日|月|年份|ID3|
| - -----|- -----|- -----|- -----|- -----|
| 十三|十二岁|十二岁|二十三|13_12_12_23|
| 十二岁|九个|九个|九十一|12_9_9_91|
| 十个|2| 3|八十|10_2_3_80|
DFB:
| 第一|最后|年龄|ID3|
| - -----|- -----|- -----|- -----|
| 汤姆|史密斯|二十五|13_12_12_23|
| 菲尔|绿色|四十一|6_11_8_45|
| 乔|布洛格斯|七十一|12_9_9_91|
| 本|博尔顿|八十四|2_1_9_63|
| 凯特|琼斯|三十四|10_2_3_80|
预期结果:
| ID3|时间|日|月|年份|第一|最后|年龄|
| - -----|- -----|- -----|- -----|- -----|- -----|- -----|- -----|
| 13_12_12_23|十三|十二岁|十二岁|二十三|汤姆|史密斯|二十五|
| 12_9_9_91|十二岁|九个|九个|九十一|乔|布洛格斯|七十一|
| 10_2_3_80|十个|2| 3|八十|凯特|琼斯|三十四|
我尝试了以下方法,但似乎无法正确识别不同的ID 2
DIFFERENT_IDS <-anti_join(DFA, DFB, by = "ID2")
my_ID2_N <- as.vector(unlist(DIFFERENT_IDS$ID2))
DFA1 <- DFA
DFA1 <-DFA1[!(DFA1$ID2 %in% my_ID2_N),]
有什么建议我可能会出错吗?可能值得注意的是,我正在合并的实际 Dataframe 在每个ID 2中包含不同数量的行(因此有时我们会为每个试验多次列出ID 2,这取决于报告的数据点,所以也许这就是导致问题的原因?)

ergxz8rk

ergxz8rk1#

下次你真的应该提供一个可复制的代码。。如果成功了就告诉我。我使用左连接只保留来自DFB的匹配ID,使用library(data.pasta)在R中拥有最大的插件(esquisse也很好)

DFA <- data.frame(
  stringsAsFactors = FALSE,
              Time = c(13L, 12L, 10L),
               Day = c(12L, 9L, 2L),
             Month = c(12L, 9L, 3L),
              Year = c(23L, 91L, 80L),
               ID3 = c("13_12_12_23", "12_9_9_91", "10_2_3_80")
       )

DFB <- data.frame(
  stringsAsFactors = FALSE,
             First = c("Tom", "Phil", "Joe", "Ben", "Kate"),
              Last = c("Smith", "Green", "Bloggs", "Bolton", "Jones"),
               Age = c(25L, 41L, 71L, 84L, 34L),
                      ID3 = c("13_12_12_23",
                              "6_11_8_45","12_9_9_91","2_1_9_63","10_2_3_80")
       )

left_join(DFA,DFB) %>% 
  relocate(ID3, .before = everything())

          ID3 Time Day Month Year First   Last Age
1 13_12_12_23   13  12    12   23   Tom  Smith  25
2   12_9_9_91   12   9     9   91   Joe Bloggs  71
3   10_2_3_80   10   2     3   80  Kate  Jones  34

相关问题