R 中是否有对引用列求和的表函数?

问题描述 投票:0回答:1

我有一个类似于下面的示例数据框的数据框:

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 对等,但这不是我的数据当前的格式。

如果现有函数无法实现,对于创建所需函数有什么建议吗?

r count
1个回答
3
投票

其中任何一个都可以:

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]))
  )
)
© www.soinside.com 2019 - 2024. All rights reserved.