代码之家  ›  专栏  ›  技术社区  ›  Chetan Arvind Patil

比较两个数据帧并保持列与特定行匹配

  •  1
  • Chetan Arvind Patil  · 技术社区  · 6 年前

    我有两个数据帧,其中一行是唯一的键,并且存在于两个数据集中。我只想在两个特定行值匹配的地方保留这些列。

    对于以下数据 Data_1 第一行为 1 , 2 , 3 , 4 然而 Data_2 只有 , , . 我想要比较或子集,这样 达塔1 只有row first as , , ,因为这些键只存在于两个数据帧中。

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

    关于如何完成这项工作有什么建议吗?

    达塔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)
    

    产量

    只有 达塔1 更改,因为它还有一行不在 达塔2 基于第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)
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   glaucon    6 年前

    你的问题有点不清楚。但是,如果您只是试图根据数据2中的一行来子集数据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