gpt4 book ai didi

r - 比较表以查找更新/删除/新

转载 作者:行者123 更新时间:2023-12-04 09:31:04 25 4
gpt4 key购买 nike

我在 R 中处理不同的数据集。每个数据集最多有 16 列和 1000 条记录。我试图找到一种方法来一次比较两个数据集,以便我可以找到已删除/更新/添加的记录。我将使用 ID 列和颜色列来识别差异。下面是一个小集合的例子(没有包括所有的列):

df1 <- data.frame(ID = letters[1:5], color = c("blue", "white", "red", "green", "blue"))

df2 <- data.frame(ID = c("a","c","d","d"), color = c("blue", "yellow", "green", "blue"))

ID 将是数据集之间的公因数。

我需要比较数据集以获得三组不同的值:

新记录:出现在 df1 但不出现在 df2 中的记录。所以我应该得到:

ID  Color
b white
c red
e blue

删除的记录:没有出现在 df1 但确实出现在 df2 中的记录

   ID    Color
c yellow
d blue

更新记录这是我需要的最重要的。基本上任何具有相同 ID 但颜色不同的东西:

   ID  df1color  df2color
c red yellow

我尝试使用 dplyr 包中的连接....但没有成功。有什么方法可以在 R 中做到这一点。

最佳答案

您可能要处理的一个问题是 data.frame() 在幕后混淆了字符变量和因子变量。检查数据框的 str()。相反,最好使用 tibble(),您可以从 dplyr 或 tibble 包中获取它。

然后,从@Stedy 发布的链接,您可以使用 dplyr 的 anti_join() 来处理前两个问题。最后一个可以通过将 inner_join() 应用于新记录的数据框,然后使用 filter() 来查找更改来完成。请参见下面的示例:

library(dplyr)

df1 <- tibble(ID = c(letters[1:5]), color = c("blue", "white", "red", "green", "blue"))
df2 <- tibble(ID = c("a","c","d","d"), color = c("blue", "yellow", "green", "blue"))

# New Records
anti_join(df1, df2)
#> # A tibble: 3 x 2
#> ID color
#> <chr> <chr>
#> 1 e blue
#> 2 c red
#> 3 b white

# Deleted records (simply swap arguments around)
anti_join(df2, df1)
#> # A tibble: 2 x 2
#> ID color
#> <chr> <chr>
#> 1 d blue
#> 2 c yellow

# Updated records
new_records <- anti_join(df1, df2)
inner_join(new_records, df2, by = "ID", suffix = c(".df1", ".df2")) %>%
filter(color.df1 != color.df2)
#> # A tibble: 1 × 3
#> ID color.df1 color.df2
#> <chr> <chr> <chr>
#> 1 c red yellow

关于r - 比较表以查找更新/删除/新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39734005/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com