melt/dcast
library(data.table)
dcast(melt(setDT(df), id.var = c("group1", "group2")),
group1 + group2 ~variable + value, length)
或者使用
recast
(包装用于
熔融/dcast
从…起
reshape2
)
library(reshape2)
recast(df, measure.var = c("a", "b"), ... ~ variable + value, length)
# group1 group2 a_0 a_1 b_0 b_1
#1 y g 1 4 3 2
#2 y h 1 0 1 0
#3 y j 1 1 0 2
#4 z g 2 0 0 2
#5 z i 0 1 0 1
#6 z j 0 1 1 0
OP公司
aggregate
给出这个输出
aggregate(. ~ group1 + group2, data = df, FUN = table)
# group1 group2 a b
#1 y g 1, 4 3, 2
#2 z g 2 2
#3 y h 1 1
#4 z i 1 1
#5 y j 1, 1 2
#6 z j 1 1
如果我们想
总数的
获得这两个
levels
factor
具有
水平
并执行
table
do.call(data.frame, aggregate(cbind(a, b) ~ group1 + group2, data = df,
FUN = function(x) table(factor(x, levels = 0:1))))
# group1 group2 a.0 a.1 b.0 b.1
#1 y g 1 4 3 2
#2 z g 2 0 0 2
#3 y h 1 0 1 0
#4 z i 0 1 0 1
#5 y j 1 1 0 2
#6 z j 0 1 1 0
drop = FALSE
在里面
dcast
dcast(melt(setDT(df), id.var = c("group1", "group2")), group1 + group2 ~
variable + value, length, drop = FALSE)
或者在
改写
recast(df, measure.var = c("a", "b"), ... ~ variable + value, length, drop = FALSE)
注意:没有
set.seed
对于
sample
,因此此处显示的输出与OP的输出不同