Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在for循环中使用条件的最快方法_R_Loops_For Loop - Fatal编程技术网

在for循环中使用条件的最快方法

在for循环中使用条件的最快方法,r,loops,for-loop,R,Loops,For Loop,因此,对于数据集birthwt,我想要的是吸烟母亲所生的低体重婴儿的百分比,并且在分娩时年龄在20岁以下。换句话说,我想知道有多少个不需要循环: library(dplyr) birthwt %>% summarise(perc = mean(age < 20 & smoke == 1 & bwt < 2600)) 库(dplyr) 出生体重%>% 总结(perc=平均值(年龄% 突变(pct=100*n/和(n)) #一个tible:4 x 4 `

因此,对于数据集birthwt,我想要的是吸烟母亲所生的低体重婴儿的百分比,并且在分娩时年龄在20岁以下。换句话说,我想知道有多少个不需要循环:

library(dplyr)
birthwt %>% 
  summarise(perc = mean(age < 20 & smoke == 1 & bwt < 2600))
库(dplyr)
出生体重%>%
总结(perc=平均值(年龄<20岁,吸烟=1岁,体重<2600))

一个for循环就足够了

#df contains the birthwt data

lwt_tot <- 0
lwt_2600 <- 0

for(i in 1:nrow(df)){
  lwt_tot <- lwt_tot + 1

  if(df$age[i] < 20 & df$smoke[i] == 1 & df$bwt[i] < 2600){
    lwt_2600 <- lwt_2600 + 1
  }

}

print((lwt_2600/lwt_tot)*100)
#[1] 3.703704
#df包含birthwt数据
lwt_tot
我想知道母亲所生的低体重婴儿的百分比
那是烟,生孩子的时候还不到20岁

这表明以下代码:

birthwt %>% 
   filter(bwt<2600) %>%
   group_by(`young(<20)`=age<20, smoke) %>%
   summarise(n = n()) %>%
   ungroup() %>%
   mutate(pct=100*n/sum(n)) 
birthwt%>%
过滤器(bwt%
分组依据(`young(%)
解组()%>%
突变(pct=100*n/和(n))

#一个tible:4 x 4

`年轻人(在基数R中,我们可以计算
年龄<20
吸烟=1
体重<2600
的人数,并将其除以体重
体重<2600
的总人数

with(birthwt, sum(age < 20 & smoke == 1 & bwt < 2600)/sum(bwt < 2600)) * 100
#[1] 11.11
带(出生体重,总和(年龄<20岁,吸烟==1岁,体重<2600)/总和(体重<2600))*100
#[1] 11.11

这有什么烦人的地方?它需要是一个循环?你在这里的分母是什么百分比:所有婴儿还是只有那些低出生体重的婴儿(它不需要以实际的方式是一个循环,但它是为了锻炼的目的。分母是出生婴儿的总数。谢谢你的回答!
# A tibble: 4 x 4
  `young(<20)` smoke     n   pct
  <lgl>        <int> <int> <dbl>
1 FALSE            0    22  34.9
2 FALSE            1    25  39.7
3 TRUE             0     9  14.3
4 TRUE             1     7  11.1
with(birthwt, sum(age < 20 & smoke == 1 & bwt < 2600)/sum(bwt < 2600)) * 100
#[1] 11.11