如何在r中编写复杂的by函数

如何在r中编写复杂的by函数,r,R,我的数据库是: Time Sex Weight Time.midnight 0005 1 3837 5 0104 1 3334 64 0118 2 3554 78 0155 2 3838 115 0257 2 3625 177 0405 1 2208 245 0407 1 1745 247 0

我的数据库是:

Time      Sex   Weight  Time.midnight
0005       1    3837       5
0104       1    3334      64
0118       2    3554      78
0155       2    3838     115
0257       2    3625     177
0405       1    2208     245
0407       1    1745     247
0422       2    2846     262
0431       2    3166     271
0708       2    3520     428
0735       2    3380     455
0812       2    3294     492
0814       1    2576     494
其中包含在医院24小时内出生的婴儿的出生时间、性别和出生体重。变量如下:

时间:24小时时钟上记录的出生时间/ 性别:孩子的性别(1=女孩,2=男孩)/ 体重:出生体重(克)/ Time.midnight:每次出生后午夜后的分钟数

现在我想计算一下体重小于3公斤的女孩的比例是多少?与男孩的相应比例相比

我想使用by()函数,但下面的命令返回了错误

by(Weight, Sex, length(which(Weight<3000)))

by(体重、性别、身高)(体重

by(df, df$Sex, function(x) sum(x$Weight < 3000) / length(x$Weight))
#df$Sex: 1
#[1] 0.6
#------------------------------------------------------------
#df$Sex: 2
#[1] 0.125

样本数据
<代码> DF R不认为列名是第一类对象。您可能想用(dByNoX,…)包装<代码>。
尽管代码的逻辑似乎与我对您的自然语言描述的理解不一致,但它与此相关。@Lili.Y通常是这样。@Lili.Y:建议您包括再现错误所需的所有设置和代码。
attach
调用特别相关。错误消息应完整报告。感谢您的支持你的建议解决了!谢谢。正确答案是(mydata,性别,函数(x)和(x$Weight<3000)/长度(Weight))
with(df, tapply(Weight, Sex, function(x) sum(x < 3000) / length(x)))
#    1     2
#0.600 0.125
df <- read.table(text =
    "Time      Sex   Weight  Time.midnight
0005       1    3837       5
0104       1    3334      64
0118       2    3554      78
0155       2    3838     115
0257       2    3625     177
0405       1    2208     245
0407       1    1745     247
0422       2    2846     262
0431       2    3166     271
0708       2    3520     428
0735       2    3380     455
0812       2    3294     492
0814       1    2576     494", header = T)