Đây là một khung dữ liệu mẫu tương tự như một bộ dữ liệu lớn hơn:Đếm một chuỗi bao gồm NA đánh giá cao
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)
Nếu có một chuỗi 4 hoặc thiếu nhiều giá trị (NAS) trong cột ngày, mà trình tự đại diện cho một khoảng cách giữa các nhóm thuần tập trong nghiên cứu. Nếu có ít hơn 4 NA trong một chuỗi, thì giá trị còn thiếu vẫn được coi là một phần của nhóm thuần tập (ví dụ: hàng 3 là một phần của nhóm thuần tập 1, nhưng hàng 8 không phải là). Trong khung dữ liệu mẫu, có 3 nhóm thuần tập (Nhóm 1: hàng 1-5, Nhóm 2: hàng 11-13 và Nhóm thuần tập 3: hàng 18-24). Tôi muốn thêm cột liệt kê số nhóm và một cột khác liệt kê ngày nghiên cứu thuần tập. Đây là mã tôi đã sử dụng:
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)
Có cách nào hiệu quả hơn để thực hiện tác vụ này không? Tôi đặc biệt tìm kiếm mã để tránh phải liệt kê số nhóm, vì tập dữ liệu thực tế của tôi sẽ có hơn 10 nhóm thuần tập. Tôi hiện đang liệt kê các chuỗi cần lặp lại: c (1, NA, 2, NA, 3).
Cảm ơn bạn!
này đã được cross-đăng tại Mã Đánh giá: http://codereview.stackexchange.com/questions/160059/r-code-to-count-a-sequence-of-cohort-studies –
Tôi có đã xóa nó khỏi Đánh giá mã. –