這裏是類似於一個較大的數據集的示例數據幀:計數序列以包括NA值
Day <- c(1, 2, NA, 3, 4, NA, NA, NA, NA, NA, 1, 2, 3, NA, NA, NA, NA, 1, 2, NA, NA, 3, 4, 5)
y <- rpois(length(Day), 2)
z <- seq(1:length(Day)) + 500
df <- data.frame(z, Day, y)
如果有在日第4個或更多缺失值(NAS)的序列,即序列代表了研究中隊列之間的差距。如果序列中少於4個NA,那麼缺失值仍被認爲是隊列的一部分(例如,第3行是第1隊列的一部分,但第8行不是)。在樣本數據框中,有3個隊列(隊列1:行1-5,隊列2:行11-13,隊列3:行18-24)。我想添加列出隊列號的列和列出隊列研究日的另一列。這裏是我使用的代碼:
require(dplyr)
CheckNA <- rle(is.na(df$Day))
CheckNA$values <- CheckNA$lengths >= 4 & CheckNA$values == 1
ListNA <- rep(CheckNA$values, CheckNA$lengths)
df$Co <- rep(c(1, NA, 2, NA, 3), rle(ListNA)$lengths) %>% as.factor()
df <- df %>%
group_by (Co) %>%
mutate(CoDay = seq(Co)) %>%
as.data.frame()
df$CoDay <- ifelse(is.na(df$Co), NA, df$CoDay)
是否有更有效的方法來完成此任務?我特別尋找代碼以避免列出隊列編號,因爲我的實際數據集將有超過10個隊列。我目前只列出了應該重複的序列:c(1,NA,2,NA,3)。
謝謝!
這已經交叉張貼在代碼審查:http://codereview.stackexchange.com/questions/160059/r-code-to-count-a-sequence-of-cohort-studies –
我有從Code Review中刪除它。 –