交叉表计算功能

时间:2018-01-30 12:49:49

标签: r function

我尝试创建自动将结果放入数据框的函数。我有一个带有一个名义变量和几个逻辑变量的data_frame:

categ_var      var_log1    var_log2   var_log3     var_log4
cat1           TRUE        TRUE       FALSE        TRUE
cat2           FALSE       TRUE       NA           TRUE
cat2           FALSE       NA         FALSE        FALSE
cat4           TRUE        FALSE      TRUE         FALSE
cat1           NA          NA         TRUE         FALSE
cat3           TRUE        FALSE      FALSE        FALSE
cat3           TRUE        TRUE       FALSE        TRUE
cat1           FALSE       TRUE       NA           TRUE
cat3           FALSE       NA         FALSE        FALSE
cat5           TRUE        FALSE      TRUE         FALSE
cat6           NA          NA         TRUE         FALSE
cat7           TRUE        FALSE      FALSE        FALSE

使用功能后:

as.data.frame(example %>% filter(var_log1 == TRUE) %>% pull(categ_var) %>% table(useNA = 'always'))

我收到了这个结果:

     . Freq
1 cat1    1
2 cat2    0
3 cat3    2
4 cat4    1
5 cat5    1
6 cat6    0
7 cat7    1
8 <NA>    0

现在,我想做两件事: a)列名等于我使用的变量名(而不是&#39; Freq&#39;), b)创建一个函数,该函数使用源数据框中的所有这些逻辑变量,并将其放入一个具有相应列名的数据框中。

任何帮助表示赞赏!

编辑:期望的输出:

            var_log1 var_log2 var_log3
1   cat1        1       2        2
2   cat2        0       1        1
3   cat3        2       1        1
4   cat4        1       0        0
5   cat5        1       0        0
6   cat6        0       0        0
7   cat7        1       0        0
8   NA          0       0        0

1 个答案:

答案 0 :(得分:0)

0行中始终有NA,因为您只按TRUE进行过滤。使用TRUE1sum的事实,您可以通过以下方式汇总数据:

library(dplyr)

example %>% 
  group_by(categ_var) %>% 
  summarise_all(sum, na.rm = T)

# A tibble: 7 x 5
#   categ_var var_log1 var_log2 var_log3 var_log4
#      <fctr>    <int>    <int>    <int>    <int>
# 1      cat1        1        2        1        2
# 2      cat2        0        1        0        1
# 3      cat3        2        1        0        1
# 4      cat4        1        0        1        0
# 5      cat5        1        0        1        0
# 6      cat6        0        0        1        0
# 7      cat7        1        0        0        0