【R每日一贴】R中by函数?
测试开头
测试结尾
若需要对数据框的行组进行函数计算,怎么办?首先,定义一个分组因子,以识别数据框各行所属的行组;然后,对于每一个这样的行组,使用R中by函数,函数by会把行放入一个临时的数据框,并且用它作为参数调用数据框。函数by,语法格式如下。
by(dfm, f, fun)
说明:dfm是数据框,f是分组因子,fun是要对行组进行函数计算,by函数把返回值放在一个列表里。举例说明如下。
> data1 <- data.frame(sex=c("F", "F", "M", "M"), pre=c(5.9, 4.5, 6.2, 4.3), dose1=c(2, 1, 1, 2), dose2=c(1, 2, 1, 1), post=c(3.2, 3.3, 4.4, 3.3))
> by(data1, data1$sex, summary)
data1$sex: F
sex pre dose1 dose2 post
F:2 Min. :4.50 Min. :1.00 Min. :1.00 Min. :3.200
M:0 1st Qu.:4.85 1st Qu.:1.25 1st Qu.:1.25 1st Qu.:3.225
Median :5.20 Median :1.50 Median :1.50 Median :3.250
Mean :5.20 Mean :1.50 Mean :1.50 Mean :3.250
3rd Qu.:5.55 3rd Qu.:1.75 3rd Qu.:1.75 3rd Qu.:3.275
Max. :5.90 Max. :2.00 Max. :2.00 Max. :3.300
------------------------------------------------------------------------------
data1$sex: M
sex pre dose1 dose2 post
F:0 Min. :4.300 Min. :1.00 Min. :1 Min. :3.300
M:2 1st Qu.:4.775 1st Qu.:1.25 1st Qu.:1 1st Qu.:3.575
Median :5.250 Median :1.50 Median :1 Median :3.850
Mean :5.250 Mean :1.50 Mean :1 Mean :3.850
3rd Qu.:5.725 3rd Qu.:1.75 3rd Qu.:1 3rd Qu.:4.125
Max. :6.200 Max. :2.00 Max. :1 Max. :4.400
> by(data1, data1$sex, print)
sex pre dose1 dose2 post
1 F 5.9 2 1 3.2
2 F 4.5 1 2 3.3
sex pre dose1 dose2 post
3 M 6.2 1 1 4.4
4 M 4.3 2 1 3.3
data1$sex: F
sex pre dose1 dose2 post
1 F 5.9 2 1 3.2
2 F 4.5 1 2 3.3
------------------------------------------------------------------------------
data1$sex: M
sex pre dose1 dose2 post
3 M 6.2 1 1 4.4
4 M 4.3 2 1 3.3
>
> models <- by(data1, data1$sex, function(df) {lm(post~pre+dose1+dose2, data=df)})
> print(models)
data1$sex: F
Call:
lm(formula = post ~ pre + dose1 + dose2, data = df)
Coefficients:
(Intercept) pre dose1 dose2
3.62143 -0.07143 NA NA
------------------------------------------------------------------------------
data1$sex: M
Call:
lm(formula = post ~ pre + dose1 + dose2, data = df)
Coefficients:
(Intercept) pre dose1 dose2
0.8105 0.5789 NA NA
【想一想】
1 R 中by函数怎么使用?
【做一做】
1查阅by函数R帮助文档和应用实例?
【温馨话语】
一个正确的认识,往往需要经过由物质到精神,由精神到物质,即由实践到认识,由认识到实践这样多次的反复,才能够完成。
我是陆勤,微信号:wangluqing360,你们在R路上的朋友,一起欣赏R路上的风景。PPV课R语言群:342699237,欢迎朋友们加入,共建最好的R社区。
赠人玫瑰,手有余香。若是觉得此文有用,欢迎分享给更多的人,让更多的人受用。
你若安好,便是晴天。若是朋友们有什么想法或建议,欢迎给我留言或者私信于我。
请关注“恒诺新知”微信公众号,感谢“R语言“,”数据那些事儿“,”老俊俊的生信笔记“,”冷🈚️思“,“珞珈R”,“生信星球”的支持!