使用dplyr合并多个结果

3

请问在R语言的dplyr包中,有没有更快的方法可以将所有计数数据合并成一个数据框?如下所示,我试图将3个计数合并到一个数据框中,但由于不知道如何联合来自我的结果的数据,所以失败了。

check = data.frame(gender = c('M','F','M','F','F'),
              place = c('US', 'Non-US', 'US', 'US', 'US'),
              work = c('IT', 'Non-IT', 'Non-IT', 'Non-IT', 'IT'),
        checkup = c('Yes', 'Yes', 'No', 'Yes', 'No'))

library(dplyr)
attach(check)
gender = count(check ,gender,checkup)
place = count(check ,place ,checkup)
work = count(check ,work ,checkup)

正如您所看到的,输出结果是:

enter image description here

我期望的输出结果应该是这样的:

enter image description here

3个回答

3

如果您使用长格式获取数据并使用 count 函数,会更加容易 -

library(dplyr)
library(tidyr)

check %>% pivot_longer(cols = -checkup) %>% count(name, value, checkup)

#   name   value  checkup     n
#   <chr>  <chr>  <chr>   <int>
# 1 gender F      No          1
# 2 gender F      Yes         2
# 3 gender M      No          1
# 4 gender M      Yes         1
# 5 place  Non-US Yes         1
# 6 place  US     No          2
# 7 place  US     Yes         2
# 8 work   IT     No          1
# 9 work   IT     Yes         1
#10 work   Non-IT No          1
#11 work   Non-IT Yes         2

0
一个 data.table 选项
> unique(melt(setDT(check), id.var = "checkup")[, n := .N, checkup:value])
    checkup variable  value n
 1:     Yes   gender      M 1
 2:     Yes   gender      F 2
 3:      No   gender      M 1
 4:      No   gender      F 1
 5:     Yes    place     US 2
 6:     Yes    place Non-US 1
 7:      No    place     US 2
 8:     Yes     work     IT 1
 9:     Yes     work Non-IT 2
10:      No     work Non-IT 1
11:      No     work     IT 1

0
使用基本的R语言和ftable。
subset(as.data.frame(ftable(cbind(stack(check[1:3]), rep(check$checkup, 3)))), Freq != 0)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接