2013-05-22 64 views
3

排序數據FRAM串我有含有對幾個行的數據幀以這種格式通過串R

41,25 
25,41 
23,41 
41,23 

我只想對那些不同和順序並不重要。 因此,例如數據幀應該是這樣的,而不是

41,25 
41,25 
41,23 
41,23 

所以我可以指望有多少次的組合,41和25個occures。

所以我想貫穿整個數據框並對每個字符串進行排序,所以最高的值先來(或者最低,沒關係)。

希望對你有所幫助。我猜這很簡單,但無法弄清楚。

感謝

+0

我假設你有這個數據,那麼字符列? – James

回答

0

@Matthew Plourde的漂亮編碼看起來可能令人尷尬,但我不認爲你想刪除重複的行,所以這裏是

#Make some data 
set.seed(1) 
N <- 200 
MIN <- 1 
MAX <- 8 
df <- data.frame(x=paste(round(runif(N, min=MIN, max=MAX)), round(runif(N, min=MIN, max=MAX)), sep=",")) 

#Split data into 2 components 
require(plyr) 
tmp <- ldply(strsplit(as.character(df$x), ",")) 
df$x1 <- as.numeric(tmp[,1]) 
df$x2 <- as.numeric(tmp[,2]) 
head(df) 

#sort smaller of values to the left 
tmp <- t(apply(df[,2:3], 1, sort)) 
df$x.sort <- apply(tmp, 1, paste, collapse=",") 
head(df) 

#sort df 
ord <- order(df$x.sort) 
df <- df[ord,] 
head(df, 20) 

導致:我想出瞭解決方案

 x x1 x2 x.sort 
167 1,1 1 1 1,1 
92 1,2 1 2 1,2 
27 1,3 1 3 1,3 
71 3,1 3 1 1,3 
28 4,1 4 1 1,4 
47 1,4 1 4 1,4 
55 1,4 1 4 1,4 
67 4,1 4 1 1,4 
81 4,1 4 1 1,4 
116 1,4 1 4 1,4 
133 1,4 1 4 1,4 
152 5,1 5 1 1,5 
10 1,6 1 6 1,6 
85 6,1 6 1 1,6 
99 7,1 7 1 1,7 
109 7,1 7 1 1,7 
5 2,2 2 2 2,2 
12 2,2 2 2 2,2 
22 2,2 2 2 2,2 
56 2,2 2 2 2,2 
+0

謝謝!像魅力一樣工作 –

3

如果d是你data.frame和對是一列字符串,然後

d[, 1] <- sapply(strsplit(d[, 1], ','), function(x) paste(sort(x), collapse=',')) 

如果對兩列之間的分裂,說1和2列,然後

d[, 1:2] <- t(apply(apply(d[, 1:2], 1, identity), 2, sort))