library(tidyverse)
我被困在应该如此简单的事情上!使用下面的代码,我想要做的就是对三个“Var”列进行分组和汇总。我想要数和总和(这样我就可以创建三个百分比的列,如果你可以在你的答案中包含一个简单的方法来实现这一点,那么奖励)。但是,我不想包括NA。使用“na.rm = TRUE”可以很容易地从sum中删除NA,但我似乎无法弄清楚如何在使用dplyr :: summarise_at时不在计数中包含NA(使用n())。
我错过了一些非常简单的事情吗?
Df%>%group_by(Group)%>%summarise_at(vars(Var1:Var3),funs(n(),sum((.),na.rm=TRUE)))
Group<-c("House","Condo","House","House","House","House","House","Condo")
Var1<-c(0,1,1,NA,1,1,1,0)
Var2<-c(1,1,1,1,0,1,1,1)
Var3<-c(1,1,1,NA,NA,1,1,0)
Df<-data.frame(Group,Var1,Var2,Var3)
答案 0 :(得分:5)
我认为您的代码非常接近完成工作。我做了一些细微的更改,并且包含了一个示例,说明如何在同一步骤中包含百分比计算(尽管我不确定您的预期输出)。
library(dplyr)
Df %>%
group_by(Group) %>%
summarise_all(funs(count = sum(!is.na(.)),
sum = sum(.,na.rm=TRUE),
pct = sum(.,na.rm=TRUE)/sum(!is.na(.))))
#> # A tibble: 2 x 10
#> Group Var1_count Var2_count Var3_count Var1_sum Var2_sum Var3_sum
#> <fctr> <int> <int> <int> <dbl> <dbl> <dbl>
#> 1 Condo 2 2 2 1 2 1
#> 2 House 5 6 4 4 5 4
#> # ... with 3 more variables: Var1_pct <dbl>, Var2_pct <dbl>,
#> # Var3_pct <dbl>
我还使用summarise_all
代替summarise_at
,因为summarise_all
适用于所有不属于group
变量的变量。
答案 1 :(得分:0)
我认为你只需要将'na.rm()'参数移回括号中。见下文:
Group<-c("House","Condo","House","House","House","House","House","Condo")
Var1<-c(0,1,1,NA,1,1,1,0)
Var2<-c(1,1,1,1,0,1,1,1)
Var3<-c(1,1,1,NA,NA,1,1,0)
Df<-data.frame(Group,Var1,Var2,Var3)
out <- Df %>%
group_by(Group) %>%
mutate_at(vars(Var1:Var3), funs(total = sum(!(is.na(.))), sum = sum(., na.rm = T))) %>%
ungroup()