2016-09-22 31 views
1

我想從包含鏡像信息的數據框中排除行。這是我輸入:排除包含不同字符串的冗餘行

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並不重要,因此我想過濾掉其中的任何一行(其中任何一行)。我沒有超過兩個冗餘行。此外,在我的實際數據集中,這些「鏡像」的行是分散的,不遵循模式。我的預期輸出:

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

回答

1

我們可以通過-分裂「信息」一欄,sort它,轉換成與duplicated邏輯載體,其將被用於子集劃分的行。

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

我伸出你的列名,使其工作。

相關問題