2013-09-01 5 views
-1

데이터 항목이 R 인 데이터 프레임이 있고 각 하위 세트에 열의 풀에서 두 열의 고유 한 가능한 쌍으로 된 조합이 포함될 때이 데이터 프레임에서 가능한 모든 고유 한 하위 집합을 작성하려고합니다. 원래 데이터 프레임. 즉, 원본 데이터 프레임의 열 수가 Y 인 경우 고유 한 하위 집합의 수는 Y * (Y-1)/2가됩니다. 또한 각 하위 집합의 열 이름이 원래 데이터 프레임에 사용 된 이름이되기를 원합니다. 어떻게해야합니까?데이터 프레임의 서브 세트

+0

안녕하세요. 여기에 새로 온 경험이 있으시면 [** about **] (http://stackoverflow.com/about) 및 [** FAQ **] (http://stackoverflow.com/faq) 섹션을 읽어보십시오. 귀하가 최대한 활용할 수 있도록 웹 사이트의 [** 훌륭한 재현 가능한 예제를 만드는 방법 **] (http://stackoverflow.com/q/5963269/1478381)도 읽고 그에 맞게 질문을 업데이트하십시오! OP가 이미 시도한 것을 보여주지 않았거나 원하는 출력이 다운 voted되거나 닫히는 경향이있는 게시 된 질문. 다음 번에 당신을 경고합니다. –

+0

새로운 데이터 프레임에 다른 열을 생성하기 위해 각 열 쌍에 어떤 기능이 적용됩니까? –

답변

0
colpairs <- function(d) { 
    apply(combn(ncol(d),2), 2, function(x) d[,x]) 
} 

x <- colpairs(iris) 
sapply(x, head, n=2) 

## [[1]] 
## Sepal.Length Sepal.Width 
## 1   5.1   3.5 
## 2   4.9   3.0 
## 
## [[2]] 
## Sepal.Length Petal.Length 
## 1   5.1   1.4 
## 2   4.9   1.4 
... 
0

나는 당신의 컬럼의 인덱스를 만들기 위해 combn를 사용하는 것, 그리고 lapply은 data.frame의 하위 집합을하고 list 구조에 저장할 수 있습니다. 예 :

# Example data 
set.seed(1) 
df <- data.frame(a = sample(2,4,repl=T) , 
      b = runif(4) , 
      c = sample(letters ,4), 
      d = sample(LETTERS , 4)) 

# Use combn to get indices 
ind <- combn(x = 1:ncol(df) , m = 2 , simplify = FALSE) 

# ind is the column indices. The indices returned by the example above are (pairs in columns):  
#[,1] [,2] [,3] [,4] [,5] [,6] 
#[1,] 1 1 1 2 2 3 
#[2,] 2 3 4 3 4 4 

# Make subsets, combine in list 
out <- lapply(ind , function(x) df[,x]) 
[[1]] 
# a   b 
#1 1 0.2016819 
#2 1 0.8983897 
#3 2 0.9446753 
#4 2 0.6607978 

[[2]] 
# a c 
#1 1 q 
#2 1 b 
#3 2 e 
#4 2 x 

[[3]] 
# a d 
#1 1 R 
#2 1 J 
#3 2 S 
#4 2 L 

[[4]] 
#   b c 
#1 0.2016819 q 
#2 0.8983897 b 
#3 0.9446753 e 
#4 0.6607978 x 

[[5]] 
#   b d 
#1 0.2016819 R 
#2 0.8983897 J 
#3 0.9446753 S 
#4 0.6607978 L 

[[6]] 
# c d 
#1 q R 
#2 b J 
#3 e S 
#4 x L 
+1

당신은'lapply'를 필요로하지 않습니다 :'combn (x = 1 : ncol (df), m = 2, FUN = function (x) df [, x], simplify = FALSE)' – Roland

+0

@ 'combn' 함수를 제공 할 수 있다는 것을 잊어 버려라. –

관련 문제