排除包含不同字符串的冗余行

时间:2016-09-22 15:30:12

标签: r duplicates

我想从包含镜像信息的数据框中排除行。这是我的意见:

dfin <- 'info
      c1-10-20-c2-40-50
      c2-1-2-c4-20-25 
      c4-20-25-c2-1-2
      c2-40-50-c1-10-20'
dfin <- read.table(text=dfin, header=T)

在上面的示例中,您可以看到行13; 24在“镜像”中表示相同的逻辑。在我的上下文中,如果我有c1-10-20-c2-40-50c2-40-50-c1-10-20并不重要,因此我想过滤掉其中一行(其中任何一行)。我不会有两个以上的冗余行。而且,在我的实际数据集中,这些&#39;镜像&#39;行分散,不遵循模式。我的预期输出:

dfout <- 'info
      c1-10-20-c2-40-50
      c2-1-2-c4-20-25'
dfout <- read.table(text=dfout, header=T)

2 个答案:

答案 0 :(得分:1)

我们可以拆分&#39;信息&#39;列-sort,转换为duplicated的逻辑向量,用于对行进行子集化。

dfN <- dfin[!duplicated(lapply(strsplit(as.character(dfin$info), "-"), sort)),, drop=FALSE]
all.equal(dfN, dfout, check.attributes=FALSE)
#[1] TRUE

答案 1 :(得分:1)

这是一种不保留原始顺序的方法:

dfin <- 'info-info-info-info-info-info
      c1-10-20-c2-40-50
c2-1-2-c4-20-25 
c4-20-25-c2-1-2
c2-40-50-c1-10-20'
df <- read.table(text=dfin, header=T, sep = "-", strip.white = T)
dfout<-as.data.frame(unique(t(apply(df, 1, sort))))

我扩展了您的列名以使其正常工作。