gpt4 book ai didi

r - 从多个数据框中子集公共(public)行

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

我有多个数据框,如下所述,每行都有唯一的 ID。我试图找到共同的行并制作一个至少出现在两个数据框中的新数据框。

Id=2 的示例行出现在所有三个数据帧中。 df1 和 df3 中有类似的 Id= 3 行。

我想创建一个循环,它可以找到共同的行并创建一个具有共同行的新数据框。

df1 <- data.frame(Id=c(1,2,3,4),a=c(0,1,0,2),b=c(1,0,1,0),c=c(0,0,4,0)) 
df2 <- data.frame(Id=c(7,2,5,9),a=c(4,1,9,2),b=c(1,0,1,5),c=c(3,0,7,0))
df3 <- data.frame(Id=c(5,3,2,6),a=c(9,0,1,5),b=c(1,1,0,0),c=c(7,4,0,0))

> df1 > df2
Id | a | b | c | Id | a | b | c |
---|---|---|---| ---|---|---|---|
1 | 0 | 1 | 0 | 7 | 4 | 1 | 3 |
---|---|---|---| ---|---|---|---|
2 | 1 | 0 | 0 | 2 | 1 | 0 | 0 |
---|---|---|---| ---|---|---|---|
3 | 0 | 1 | 4 | 5 | 9 | 1 | 7 |
---|---|---|---| ---|---|---|---|
4 | 2 | 0 | 0 | 9 | 2 | 5 | 0 |

> df3
Id | a | b | c |
---|---|---|---|
5 | 9 | 1 | 7 |
---|---|---|---|
3 | 0 | 1 | 4 |
---|---|---|---|
2 | 1 | 0 | 0 |
---|---|---|---|
6 | 5 | 0 | 0 |

> expected_output
Id | a | b | c |
---|---|---|---|
5 | 9 | 1 | 7 |
---|---|---|---|
3 | 0 | 1 | 4 |
---|---|---|---|
2 | 1 | 0 | 0 |
---|---|---|---|

注意:- ID 是唯一的。
另外,我想从重复的原始数据框中删除行,我正在使用它来创建新的数据框。

最佳答案

I have multiple dataframes like mentioned below with unique id for each row. I am trying to find common rows and make a new dataframe which is appearing at least in two dataframes.



由于没有 ID 在同一个表中出现两次,我们可以将这些 ID 制成表格并将任何找到的 ID 保留两次:
library(data.table)

DTs = lapply(list(df1,df2,df3), data.table)

Id_keep = rbindlist(lapply(DTs, `[`, j = "Id"))[, .N, by=Id][N >= 2L, Id]

DT_keep = Reduce(funion, DTs)[Id %in% Id_keep]

# Id a b c
# 1: 2 1 0 0
# 2: 3 0 1 4
# 3: 5 9 1 7

您的数据应位于 DTs 之类的对象中首先,不是一堆单独的命名对象。

这个怎么运作

要了解它是如何工作的,请检查中间对象,例如
  • list(df1,df2,df3)
  • lapply(DTs, `[`, j = "Id")
  • Reduce(funion, DTs)

  • 另外,阅读帮助文件,如 ?lapply , ?rbindlist , ?funion .

    关于r - 从多个数据框中子集公共(public)行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45380839/

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