我有一个类似于下面的示例数据框的数据框:
example = data.frame(
freq = c(22,1,12,4,8,76,55,43,1,34),
x=c("FALSE","FALSE","TRUE","FALSE","TRUE","TRUE","TRUE","FALSE","FALSE","TRUE"),
y=c("FALSE","FALSE","TRUE","FALSE","FALSE","TRUE","TRUE","TRUE","TRUE","TRUE")
)
如果我在最后两列上执行正常的
table()
函数,则会根据行频率得到以下结果:
> table(example$x,example$y)
FALSE TRUE
FALSE 3 2
TRUE 1 4
但是,我想要的是一个将各自行的 example$freq 列中的值相加的函数,理想情况下会产生如下所示的结果:
FALSE TRUE
FALSE 27 44
TRUE 8 177
这对于现有函数是否可能(理想情况下也能够返回除 [2,2] 以外的维度表)?
如果每个实例都有一行,这当然不会成为问题。 27 行 FALSE FALSE 对等,但这不是我的数据当前的格式。
如果现有函数无法实现,对于创建所需函数有什么建议吗?
其中任何一个都可以:
xtabs(freq ~ x + y, example)
xtabs(freq ~ ., example)
xtabs(example)
tapply(example[[1]], example[-1], sum)
library(tidyr)
example %>% uncount(freq) %>% table
with(example,
outer(
X = setNames(nm = unique(x)),
Y = setNames(nm = unique(y)),
FUN = Vectorize(\(X, Y) sum(freq[x == X & y == Y]))
)
)