我正在尝试创建自动将我的结果放入数据框中的函数。我有一个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( 有一个等于我正在使用的变量名的列名(而不是"Freq"(,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
您将
始终在NA
行中0
,因为您仅按TRUE
进行过滤。使用该TRUE
1
在sum
的事实,您可以按以下方式汇总数据:
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