【问题标题】:Compare Two Data Frame And Keep Columns That Match For Specific Row比较两个数据框并保留与特定行匹配的列
【发布时间】:2019-01-08 02:57:18
【问题描述】:

我有两个数据框,它们有一行是唯一键,并且存在于两个数据集中。我只想保留那些与特定行值匹配的列。

对于以下数据,Data_1 的第一行为1,2,3,4,但Data_2 只有1,2,3。我想要比较或子集,这样Data_1 的第一行只有123,因为这些键只存在于两个数据帧中。

目标不是合并,而是根据两个不同数据帧的比较进行子集。

关于如何完成这项工作的任何建议?

Data_1

read.table(text = "A    B    C    D
       1    2    3    4
       1.1  1.2  1.3  1.4
       1.1  1.2  1.3  1.4
       1.1  1.2  1.3  1.4
       1.1  1.2  1.3  1.4
       1.1  1.2  1.3  1.4", header = T)

数据_2

read.table(text = "A1    B1    C1  
       1    2    3   
       1.0  2.2  4.3 
       1.0  2.2  4.3 
       1.0  2.2  4.3 
       1.0  2.2  4.3 
       1.0  2.2  4.3 ", header = T)

输出

只有 Data_1 发生变化,因为它有一个额外的行,根据第 2 行的值不在Data_2

read.table(text = "A    B    C
       1    2    3 
       1.1  1.2  1.3
       1.1  1.2  1.3
       1.1  1.2  1.3
       1.1  1.2  1.3
       1.1  1.2  1.3", header = T)

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    您的问题有些不清楚。但是,如果您只是尝试根据 data_2 中的一行对 data_1 进行子集化,则下面的代码将起作用。换句话说,下面的代码会生成您想要的“输出”数据框。

    data_1 <- read.table(text = "A    B    C    D
                                 1    2    3    4
                                 1.1  1.2  1.3  1.4
                                 1.1  1.2  1.3  1.4
                                 1.1  1.2  1.3  1.4
                                 1.1  1.2  1.3  1.4
                                 1.1  1.2  1.3  1.4", header = T)
    
    data_2 <- read.table(text = "A1    B1    C1  
                                 1    2    3   
                                 1.0  2.2  4.3 
                                 1.0  2.2  4.3 
                                 1.0  2.2  4.3 
                                 1.0  2.2  4.3 
                                 1.0  2.2  4.3 ", header = T)
    
    output <- data_1[data_1[1,] %in% data_2[1,]]
    
        A   B   C
    1 1.0 2.0 3.0
    2 1.1 1.2 1.3
    3 1.1 1.2 1.3
    4 1.1 1.2 1.3
    5 1.1 1.2 1.3
    6 1.1 1.2 1.3
    

    【讨论】:

    • .@glaucon - 这就是我想要的。抱歉,如果问题不清楚。
    • 没问题。乐意效劳。只需将此标记为正确答案(点击复选标记即可变为绿色)
    • .@glaucon - 完成。现在我不能在接下来的 6 个月内再次在 SO 上提问,因为 SO 说我的问题没有得到很好的答复。 6 个月后再见。
    • .@glaucon - 如果我对列进行洗牌,您的代码会起作用吗?
    • 这取决于是否匹配。例如,data_1[data_1[2,] %in% data_2[2,]] 返回一个空白数据框,因为测试中没有 TRUE 值。在匹配的情况下,是的,代码将起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-30
    • 1970-01-01
    • 2019-08-16
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多