简体   繁体   English

用 dplyr 替换 for 循环

[英]replace for loop with dplyr

I would like to replace this simple for loop with a dplyr option:我想用dplyr选项替换这个简单的 for 循环:

df <- data.frame(ID=c(rep(7,3), rep(8,3), rep(9,3)), visit= c(rep(c(0, 180, 360),3)), value = c("Poor", NA, "High", "High", NA, "High", NA, "Poor", "Poor") )

vec <- sum(!is.na(df$value)[df$visit==0])

for (i in seq(180, 360, 180)) {
      tmp <- sum(!is.na(df$value)[df$visit==i])
      vec <- c(vec, tmp)
 }

to obtain the vector of lengths where 'value' is not missing, for each 'visit' i :为每个“访问” i获取不缺少“值”的长度向量:

 vec
[1] 2 1 3

A simple dplyr approach would be group_by your visit column, then sum up value that is not NA .一个简单的dplyr方法是group_by您的visit列,然后sum不是NAvalue

If you wish you have a dataframe instead of a vector, just ignore pull(vec) .如果您希望使用 dataframe 而不是矢量,请忽略pull(vec)

library(dplyr)

df %>% 
  group_by(visit) %>% 
  summarize(vec = sum(!is.na(value))) %>% 
  pull(vec)

[1] 2 1 3

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM