【问题标题】:R: Find non-similar columns for records of interest in dataframeR:为数据框中感兴趣的记录查找不相似的列
【发布时间】:2017-04-19 20:52:01
【问题描述】:

在所有记录中,我在名为 test3333 的数据框中有两列(parent_mol_chembl_id,parent_name)的 225 条重复记录(2859 条观测值,4734 列)。

  parent_mol_chembl_id  parent_name  D000022 D000038 D000152 D000166
  CHEMBL1502            PANTOPRAZOLE    0       0       0    0
  CHEMBL1502            PANTOPRAZOLE    0       0       0    1
  CHEMBL790             DZOLE           0       0       1    1
  CHEMBL790             DZOLE           0       0       0    1

我想找出重复行中哪些列不同。 我这样做grep('CHEMBL1502', test3333[,1]) 然后我检查不同的列范围以识别差异。

grep('CHEMBL1502', test3333[,1]) 的期望输出

  parent_mol_chembl_id  parent_name   D000166
  CHEMBL1502            PANTOPRAZOLE    0
  CHEMBL1502            PANTOPRAZOLE    1

grep('CHEMBL790', test3333[,1]) 的期望输出

  parent_mol_chembl_id  parent_name   D000152
  CHEMBL790             DZOLE           1   
  CHEMBL790             DZOLE           0     

我想找出特定 parent_mol_chembl_id 的数据框中哪些列名不同?请让我知道检查不同列的语法是什么?

【问题讨论】:

    标签: r


    【解决方案1】:

    我们可以通过前两列执行split,然后根据列中unique 元素的length 执行Filter 列。我们删除只有一个 unique 元素的列

    lapply(split(df1, df1[1:2], drop=TRUE), function(df) 
             Filter(function(x) length(unique(x))>1|!is.numeric(x), df))
    #$CHEMBL790.DZOLE
    #  parent_mol_chembl_id parent_name D000152
    #3            CHEMBL790       DZOLE       1
    #4            CHEMBL790       DZOLE       0
    
    #$CHEMBL1502.PANTOPRAZOLE
    #   parent_mol_chembl_id  parent_name D000166
    #1           CHEMBL1502 PANTOPRAZOLE       0
    #2           CHEMBL1502 PANTOPRAZOLE       1
    

    数据

    df1 <- structure(list(parent_mol_chembl_id = c("CHEMBL1502", "CHEMBL1502", 
    "CHEMBL790", "CHEMBL790"), parent_name = c("PANTOPRAZOLE", "PANTOPRAZOLE", 
    "DZOLE", "DZOLE"), D000022 = c(0L, 0L, 0L, 0L), D000038 = c(0L, 
    0L, 0L, 0L), D000152 = c(0L, 0L, 1L, 0L), D000166 = c(0L, 1L, 
    1L, 1L)), .Names = c("parent_mol_chembl_id", "parent_name", "D000022", 
    "D000038", "D000152", "D000166"), class = "data.frame",
     row.names = c(NA, -4L))
    

    【讨论】:

      【解决方案2】:

      我获取了重复的第一列 id 的索引和

        mydata <- test3333  
          uniqueIds = as.character(mydata[duplicated(as.character(mydata$parent_mol_chembl_id)),1])#unique(as.character(mydata$parent_mol_chembl_id))
              for(i in 1:length(uniqueIds))
              {
                print(uniqueIds[i])
                testIds = uniqueIds[i]
                index = which(testIds==mydata[,1])
                tmp=mydata[index,]
                countX = apply(tmp,2,function(x) length(unique(x[!is.na(x)])))
                length(which(countX!=1))
                table(countX)
                indexDiff=which(countX>1)
                if(length(indexDiff)==1)
                {
                  t=as.matrix(tmp[,indexDiff])
                  colnames(t)=colnames(tmp)[indexDiff]
                  print(t)
                }else{
                  print(tmp[,indexDiff])
                }
      
              }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-21
        • 2011-08-10
        • 1970-01-01
        • 2011-01-21
        • 1970-01-01
        相关资源
        最近更新 更多