Извлечение позиций в фрейме данных на основе вектора

#r

#r

Вопрос:

В наборе данных я хочу знать, где отсутствуют значения, поэтому я использую, какие (is.na (df)). Затем я делаю, например, вменение в этом наборе данных, и после этого я хочу извлечь вмененные позиции. Но я не знаю, как извлечь эти данные. У кого-нибудь есть предложения? Спасибо!

  id <- factor(rep(letters[1:2], each=5))
 A <- c(1,2,NA,67,8,9,0,6,7,9)
 B <- c(5,6,31,9,8,1,NA,9,7,4)
 C <- c(2,3,5,NA,NA,2,7,6,4,6)
 D <- c(6,5,89,3,2,9,NA,12,69,8)
 df <- data.frame(id, A, B,C,D) 
 df

   id  A  B  C  D
1   a  1  5  2  6
2   a  2  6  3  5
3   a NA 31  5 89
4   a 67  9 NA  3
5   a  8  8 NA  2
6   b  9  1  2  9
7   b  0 NA  7 NA
8   b  6  9  6 12
9   b  7  7  4 69
10  b  9  4  6  8

pos_na <- which(is.na(df))

 pos_na
[1] 13 27 34 35 47

# after imputation
id <- factor(rep(letters[1:2], each=5))
A <- c(1,2,4,67,8,9,0,6,7,9)
B <- c(5,6,31,9,8,1,65,9,7,4)
C <- c(2,3,5,8,2,2,7,6,4,6)
D <- c(6,5,89,3,2,9,6,12,69,8)
df <- data.frame(id, A, B,C,D) 
df
       id  A  B C  D
    1   a  1  5 2  6
    2   a  2  6 3  5
    3   a  4 31 5 89
    4   a 67  9 8  3
    5   a  8  8 2  2
    6   b  9  1 2  9
    7   b  0 65 7  6
    8   b  6  9 6 12
    9   b  7  7 4 69
    10  b  9  4 6  8
    
  

Требуемый результат: 4,65,8,2 6

Ответ №1:

Для хранения позиций NA использования which , с arr.ind = TRUE которыми задаются номера строк и столбцов.

 pos_na <- which(is.na(df), arr.ind = TRUE)
pos_na

#     row col
#[1,]   3   2
#[2,]   7   3
#[3,]   4   4
#[4,]   5   4
#[5,]   7   5
  

Чтобы после вменения вы могли извлекать значения напрямую.

 as.numeric(df[pos_na])
[1]  4 65  8  2  6
  

Ответ №2:

Вместо переноса с which помощью, мы можем сохранить его как логическую матрицу

 i1 <- is.na(df[-1])
  

Затем, после вменения, просто используйте i1

 df[-1][i1]
#[1]  4 65  8  2  6
  

Обратите внимание, -1 что индексация для столбцов заключается в удалении первого столбца, который является «символьным»