Новичок в 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>
r
0
sai saran 14 Окт 2018 в 13:28

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
1
Rui Barradas 14 Окт 2018 в 12:53