列组合出现的计数

时间:2017-05-20 16:32:38

标签: r matrix

我有一个包含三个变量(X1,X2,X3)的数据集,这些变量的值只取0或1。

数据集是

dput(data)
structure(c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0), .Dim = c(10L, 3L), .Dimnames = list(
    NULL, c("x1", "x2", "x3")))

在上面的示例中,每行都是一个观察,每列都是一个变量。

我需要知道

的频率

(X1 = 1),(X2 = 1),(X3 = 1),(X1 = 1,X2 = 1),(X1 = 1,X3 = 1),(X2 = 1,X3 = 1) ,(X1 = 1,X2 = 1,X3 = 1)

我试过

table(rowSums(data !=0))

但这只会给我一个,两个或三个变量的频率。

2 个答案:

答案 0 :(得分:2)

你可以这样做:

<div class="studentlist">
    <?php foreach($query as $row):?>                                                                              
        <div class="studentlist_row">
            <?=$row->student_name?>
        </div>
    <?php endforeach ?> 
</div>

根据user2957945建议的简短版本:

comb <- sapply(1:3, combn, x = 3)
find <- function(colComb) sum(rowSums(data.frame(df[, colComb])) == length(colComb))
list <- sapply(comb, function(colComb) apply(colComb, 2, find))
names(list) <- sapply(comb, function(colComb) paste(apply(colComb, 2, paste, collapse = "&"), collapse = "|"))

$`1|2|3`
[1] 10  9  4

$`1&2|1&3|2&3`
[1] 9 4 3

$`1&2&3`
[1] 3

答案 1 :(得分:0)

您可以使用xtabs用于三向表:

s <- structure(c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0), .Dim = c(10L, 3L), .Dimnames = list(
NULL, c("x1", "x2", "x3")))

mytab <- xtabs(~x1+x2+x3, data = s)

mytab

, , x3 = 0

   x2
x1  0 1
  1 0 6

, , x3 = 1

   x2
x1  0 1
  1 1 3

如果您希望它看起来更好,请使用ftable

进行操作
ftable(mytab)

      x3 0 1
x1 x2       
 1  0     0 1
    1     6 3

但请注意,您的示例只有x1的一个值。