2013-05-29 2 views
2

저는 R이 처음이므로 열 조합에 대해 몇 가지 작업을 수행하고 싶습니다. 나는 열의 여러 조합에서 1의 수를 세는 코드를 작성하는 데 어려움을 겪고있다.r의 이진 값 조합

A B C D

I 먼저 각 열에 하나의 수를 계산하고자하는 (A, B, C, D) : I는 다음 열을 가정한다. 그런 다음 2 열 조합 (AB, AC, AD, BC, BD, CD)마다 1의 수입니다. 그런 다음 3 열 조합 (ABC, ACD, BCD)마다 1의 수 모든 열에 1의 수 (ABCD)

실제 데이터 프레임에는 약 10 개 열이 있습니다.

각 조합에 대해 이진수 값을 생성 한 다음 배열에 이진 값을 모두 포함하는 것이 좋지만 조언을 제공해 주시면 감사하겠습니다. 많은 감사

+0

이진 열 A와 B를 결합한다는 것은 무엇을 의미합니까? OR 또는 AND를 계산 하시겠습니까? – flodel

+0

OR, 열 A 또는 B에 나타나는 모든 1을 계산하십시오. – DrPaulVella

+0

음, 내가 참조한 것을 OR로 알지 못합니다 ... 그래서 A를 (0, 0, 1, 1) B는 (0, 1, 1, 0)이고, A와 B를 결합한 결과는 무엇인가 : 3 또는 4? – flodel

답변

2

일부 샘플 데이터 : 액션에서

count.or <- function(dat, n = 2) { 
    or.sum <- function(cols) sum(rowSums(dat[cols]) > 0) 
    counts <- combn(colnames(dat), n, FUN = or.sum) 
    names <- combn(colnames(dat), n, FUN = paste, collapse = "") 
    setNames(counts, names) 
} 

:

count.or(dat, 1) 
# A B C D 
# 6 6 5 9 
count.or(dat, 2) 
# AB AC AD BC BD CD 
# 8 7 9 9 10 9 
count.or(dat, 3) 
# ABC ABD ACD BCD 
# 9 10 9 10 
count.or(dat, 4) 
# ABCD 
# 10 
n <- 10 
dat <- data.frame(A = sample(0:1, n, replace = TRUE), 
        B = sample(0:1, n, replace = TRUE), 
        C = sample(0:1, n, replace = TRUE), 
        D = sample(0:1, n, replace = TRUE)) 

결합하는 열의 수를 주어진 함수는, 모든 조합 및 해당 금액을 계산

또는 한 번의 전화 :

unlist(lapply(1:4, count.or, dat = dat)) 
# A B C D AB AC AD BC BD CD ABC ABD ACD BCD ABCD 
# 6 6 5 9 8 7 9 9 10 9 9 10 9 10 10 
+0

감사합니다! – DrPaulVella