如何在R中根据两组求值的和,即使存在缺失值?
如果存在缺失值,我们可以使用dplyr包的`group_by`和`summarise`函数来根据两组求值的和。
例如,如果我们有一个名为df的数据框,其中包含一个数值列(例如Num)和两个分组列(例如Grp1和Grp2),那么如果df中存在缺失值,则可以通过使用以下命令来找到基于Grp1和Grp2的Num中值的和:
df%>%group_by(Grp1,Grp2)%>%summarise(Sum=sum(Num,na.rm=TRUE))
示例1
以下代码片段创建一个示例数据框:
grp1<-sample(LETTERS[1:3],20,replace=TRUE) grp2<-sample(letters[1:3],20,replace=TRUE) Dep_Var<-sample(c(NA,rpois(2,5)),20,replace=TRUE) df1<-data.frame(grp1,grp2,Dep_Var) df1
输出
创建以下数据框:
grp1 grp2 Dep_Var 1 A a 4 2 A c NA 3 C a 5 4 A c NA 5 A b NA 6 A a 4 7 C c 5 8 B b 4 9 C a NA 10 A c 5 11 B a NA 12 B c 5 13 A c NA 14 C c 4 15 C c 5 16 A a NA 17 C b 4 18 A a 4 19 B a 4 20 B a NA
要加载dplyr包并根据grp1和grp2查找Dep_Var中值的和,请将以下代码添加到上面的代码片段中:
library(dplyr) df1%>%group_by(grp1,grp2)%>%summarise(Sum=sum(Dep_Var,na.rm=TRUE)) `summarise()` regrouping Output by 'grp1' (override with `.groups` argument) # A tibble: 9 x 3 # Groups: grp1 [3]
输出
如果您将以上所有代码片段作为一个程序执行,它将生成以下输出:
grp1 grp2 Sum <chr> <chr> <int> 1 A a 12 2 A b 0 3 A c 5 4 B a 4 5 B b 4 6 B c 5 7 C a 5 8 C b 4 9 C c 14
示例2
以下代码片段创建一个示例数据框:
Class<-sample(c("First","Second","Third"),20,replace=TRUE) Rank<-sample(1:4,20,replace=TRUE) Score<-sample(1:100,20) df2<-data.frame(Class,Rank,Score) df2
输出
创建以下数据框:
Class Rank Score 1 Second 4 100 2 First 4 76 3 First 2 54 4 Third 3 66 5 Third 2 98 6 Second 1 81 7 First 3 95 8 Second 1 7 9 Third 3 94 10 Second 1 78 11 Third 3 13 12 Third 2 19 13 Second 4 30 14 First 4 31 15 Second 3 87 16 First 3 38 17 First 1 60 18 First 3 36 19 Second 4 3 20 Third 3 84
要根据班级和排名查找Score中值的和,请将以下代码添加到上面的代码片段中:
df2%>%group_by(Class,Rank)%>%summarise(Sum=sum(Score,na.rm=TRUE)) `summarise()` regroupingOutput
by 'Class' (override with `.groups` argument) # A tibble: 9 x 3 # Groups: Class [3]
输出
如果您将以上所有代码片段作为一个程序执行,它将生成以下输出:
Class Rank Sum <chr> <int> <int> 1 First 1 60 2 First 2 54 3 First 3 169 4 First 4 107 5 Second 1 166 6 Second 3 87 7 Second 4 133 8 Third 2 117 9 Third 3 257
广告