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.

假设我想知道有 3 个条目且 B = 1 的名称(A 列)的数量,以及有 3 个条目且 B = 2 的名称的数量,等等?

在上面的示例中,“Mike”有 3 个条目,其中 B = 1,但没有 B = 2 或 B = 3。“Simon”有 3 个条目,其中 B = 2,依此类推。它在数据中交叉条目,我还没有在 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

我相信这就是你所追求的(但要意识到代码对于 R 新手来说非常密集,甚至可能对于不那么新手来说):

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

B 的值在顶部,而频率(具有 、 和 的人数B=1B=2B=3旁边。

于 2013-02-07T04:39:11.667 回答