Новичок в R и извиняюсь, если я спрашиваю неправильно:
Как добавить число в каждый конец ряда неравной длины столбцов?
Образец кода:
x = 1:12
y = 1:10
z=1:8
attributes(df) = list(names = names(df),row.names=1:max(length(x), length(y),length(z)), class='data.frame')
df
# x y z
#1 1 1 1
#2 2 2 2
#3 3 3 3
#4 4 4 4
#5 5 5 5
#6 6 6 6
#7 7 7 7
#8 8 8 8
#9 9 9 <NA>
#10 10 10 <NA>
#11 11 <NA> <NA>
#12 12 <NA> <NA>
1 ответ
Прежде всего, чтобы преобразовать список векторов неравной длины в data.frame
, заполнение векторов NA
вашим кодом неправильно, этот лучше.
x <- 1:12
y <- 1:10
z <- 1:8
df <- list(x = x, y = y, z = z)
n <- max(sapply(df, length))
df <- lapply(df, function(x){
c(x, rep(NA, n - length(x)))
})
df <- do.call(cbind.data.frame, df)
Следующий код заменит первый NA
в каждой строке значением 3
.
Он просматривает строки, используя apply
, и изменяет строки как минимум с одним значением NA
.
df[] <- t(apply(df, 1, function(x){
if(anyNA(x)){
i <- min(which(is.na(x)))
x[i] <- 3
}
x
}))
df
# x y z
#1 1 1 1
#2 2 2 2
#3 3 3 3
#4 4 4 4
#5 5 5 5
#6 6 6 6
#7 7 7 7
#8 8 8 8
#9 9 9 3
#10 10 10 3
#11 11 3 NA
#12 12 3 NA
Похожие вопросы
Новые вопросы
r
R - это бесплатный язык программирования с открытым исходным кодом и программная среда для статистических вычислений, биоинформатики, визуализации и общих вычислений. Пожалуйста, предоставьте минимальные и воспроизводимые примеры вместе с желаемым результатом. Используйте dput () для данных и укажите все небазовые пакеты с вызовами library (). Не вставляйте изображения для данных или кода, вместо этого используйте блоки кода с отступом. По вопросам, связанным со статистикой, используйте https://stats.stackexchange.com.