很抱歉,如果描述含糊不清 - 我对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中还没有这样做,我不确定如何最好地接近它。
答案 0 :(得分:3)
假设这是在名为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
答案 1 :(得分: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=1
,B=2
和B=3
的人数)位于旁边。