2012-01-24 16 views
1

我正在運行expand.grid函數。對於一個簡單的例子,如何從expand.grid中生成滿足特定條件的輸出R

a <- c(1,2,3,"X","Y","M") 
b is identical as b. 

如果我採取expand.grid(A,B),則返回所有對包括對角線元素 - (1,1),(2,2),....( (2,1),(3,2)(x,1),...等等的元素,其中第一對大於第二對的元素。 (但實際上,這裏沒有數字比較,因爲有像x,y這樣的字符)我想在輸出中排除這樣的對。我怎樣才能簡單地生成輸出沒有他們通過使用expand.grid函數,或者,任何其他功能來做到這一點?

回答

1

對Vincent Zoonekynd的稍作修改將處理非數值因素:

a <- c(1,2,3,"X","Y","M") 
eg <- expand.grid(a,a) 
eg2 <- eg[as.character(eg$Var1) < as.character(eg$Var2), ] 

基本上,您需要的是使用字符串比較而不是「簡單」比較,而不是對因子變量起作用。

0

你可以只取子集你有興趣:

a <- b <- 1:5 
subset(expand.grid(a,b), Var1 < Var2) 
+0

對不起,我剛剛編輯我的問題,在a,b有一些字符像< - c(1,2,3,「X」,「Y」) – ronaldkelley

2
eg <- expand.grid(a=1:4, b=1:4) 

> eg[eg$a < eg$b, ] 
    a b 
5 1 2 
9 1 3 
10 2 3 
13 1 4 
14 2 4 
15 3 4 

這裏是另一個潛在的有用的功能combn這retruns需要換位矩陣,讓你問什麼:

> data.frame(t(combn(x=1:4, m=2))) 
    X1 X2 
1 1 2 
2 1 3 
3 1 4 
4 2 3 
5 2 4 
6 3 4 
相關問題