#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
что индексация для столбцов заключается в удалении первого столбца, который является «символьным»