这个问题来自a previous question。而不是有两列,如果我们有三列或更多列怎么办?请考虑以下数据。
x <- c(600, 600, 600, 600, 600, 600, 600, 600, 600, 800, 800, 800, 800, 800, 800, 800, 800, 800,
600, 600, 600, 600, 600, 600, 600, 600, 600, 800, 800, 800, 800, 800, 800, 800, 800, 800,
600, 600, 600, 600, 600, 600, 600, 600, 600, 800, 800, 800, 800, 800, 800, 800, 800, 800)
y <- c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3)
z <- c(1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3,
1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3,
1, 2, 3, 1, 2, 3)
xyz <- data.frame(cbind(x, y, z))
如果我们将所有列视为具有有限数量级别的因子。我想得到的是x,y和z的每个独特组合中的观察数量。答案是18个独特的组合,每个组合有3个观察结果。我怎么能在R做这个呢?谢谢!
答案 0 :(得分:4)
将table
或tabulate
与interaction
tabulate(with(xyz, interaction(x,y,z)))
table(with(xyz, interaction(x,y,z)))
通过互动或split
使用lengths
,
lengths(split(xyz, with(xyz, interaction(x,y,z))))
或
aggregate(seq_along(x)~ x+y+z, data=xyz, FUN=length)
答案 1 :(得分:1)
使用data.table
的选项。我们将'data.frame'转换为'data.table'(setDT(xyz)
,按'xyz'列分组,获取每组中的元素数量(.N
)
library(data.table)
setDT(xyz)[, .N, names(xyz)]$N
#[1] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
或者使用dplyr
,我们按列进行分组,使用n()
获取元素数量(summarise
)。
library(dplyr)
xyz %>%
group_by_(.dots=names(xyz)) %>%
summarise(n=n()) %>%
.$n
#[1] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3