[英]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
不是NA
的value
。
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.