У меня есть 200 наборов данных с размером 5120 * 732. Некоторые элементы - NA.
Теперь в каждой строке, когда они> = N1 (N1 = 8) последовательных элементов, которые не являются NA (то есть is.na () == FALSE), я хотел бы поставить перед ними все с 'D'.
Вот пример с N1 = 3.
df1 <- data.frame(c(1.0,NA,1.1,1.2,1.3),
c(2.0,2.1,NA,NA,NA),
c(3.0,3.1,3.2,3.3,NA),
c(4.0,4.1,4.2,4.3,4.4),
c(5.0,NA,5.1,NA,5.2))
Ожидаемый результат должен быть:
df1_expected <- data.frame(c('D1.0',NA,1.1,1.2,1.3),
c('D2.0','D2.1',NA,NA,NA),
c('D3.0','D3.1','D3.2',3.3,NA),
c('D4.0','D4.1','D4.2',4.3,4.4),
c('D5.0',NA,'D5.1',NA,5.2))
Вот код, который я изменил из этого поста но это не работает, как ожидалось.
Существует ли эффективный метод проверки 8 последовательных элементов, которые не являются NA (т.е. is.na () == FALSE) в каждом столбце большого набора данных?
Любые советы или подсказки с благодарностью!
Мой код:
append_one <- function(x, N, pref = "D"){
y <- rep(pref, length(x))
is.na(y) <- is.na(x)
r <- rle(y)
r$values[r$lengths < N] <- ""
y <- inverse.rle(r)
paste0(y, x)
}
append_all <- function(X, n, pref = "D"){
Y <- X
Y [] <- apply(Y, 1, append_one, N = n, pref = pref) #where I modified
Y
}