我想从包含镜像信息的数据框中排除行。这是我的意见:
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)
在上面的示例中,您可以看到行1
和3
; 2
和4
在“镜像”中表示相同的逻辑。在我的上下文中,如果我有c1-10-20-c2-40-50
或c2-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)
答案 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))))
我扩展了您的列名以使其正常工作。