2

説明があいまいな場合は申し訳ありません-私はRに非常に慣れておらず、やりたいことを正確に視覚化するのが難しいと感じています。いくつかのデータがあるとします:

dat <- read.table(text = '
A    B    C
"Mike"    1    1
"Mike"    1    17
"Mike"    1    3
"Mike"    2    4
"Mike"    3    18
"Simon"    1    2
"Simon"    1    25
"Simon"    2    12
"Simon"    2    182
"Simon"    2    6', header=TRUE)
... etc.

B = 1 である 3 つのエントリを持つ名前 (A 列) の数と、B = 2 である 3 つのエントリを持つ名前の数などを知りたいとします。

上記の例では、「Mike」には B = 1 の 3 つのエントリがありますが、B = 2 または B = 3 ではありません。「Simon」には B = 2 のエントリが 3 つあります。これは、R でまだ行ったことのないデータのエントリの交差であり、どのようにアプローチするのが最善かわかりません。

4

2 に答える 2

3

これがという名前のdata.frameにあると仮定しますdat

> tapply(dat$B, dat$A, function(x) names(table(x))[table(x)==3] )
 Mike Simon 
  "1"   "2" 

あなたのコメントは、表形式の表示が必要だったことを示唆しています。したがって、おそらくこれも興味深いでしょう:

> xtabs( ~ A + B, dat)
       B
A       1 2 3
  Mike  3 1 1
  Simon 2 3 0

そして、時々必要とされるそのマトリックスを操作する方法があります:

> which( xtabs( ~ A + B, dat) == 3, arr.ind=TRUE )
      row col
Mike    1   1
Simon   2   2
于 2013-02-07T04:28:08.293 に答える
1

I believe this is what you're after (but realize the code's terribly dense for an R newbie, and possibly even for not-so-newbies):

tab <- table(dat[1:2])
m <- max(tab)
apply(rbind(tab, m), 2, tabulate) - c(rep(0, m-1), 1)
#      1 2 3
# [1,] 0 1 1
# [2,] 1 0 0
# [3,] 1 1 0

Values of B are along the top while frequencies (number of people having that count of B=1, B=2, and B=3) are along the side.

于 2013-02-07T04:39:11.667 に答える