Определить отсутствующие значения в таблице данных R - PullRequest
1 голос
/ 16 июня 2020

Я хочу определить недостающие значения в таблице данных R

Чтобы получить идентификатор, столбец «id» каждого столбца в вашем наборе данных

Я использую apply(is.na(dt_tb) 2, which) этот скрипт сообщает мне позицию, я хотел бы заменить позицию номером id (столбец id)

dt_tb <- data.table(id = c(5, 6, 7, 15),
                 coll = c("this", NA,"NA", "text"),
                 cyy = c(TRUE, FALSE, TRUE, TRUE),
                 hhh = c(2.5, 4.2, 3.2, NA),
                 stringsAsFactors = FALSE)

apply(is.na(dt_tb), 2, which)

пример $ id integer (0)

$ coll [1] 2

$ cyy integer (0)

$ hhh [1] 4

Я хочу

id integer (0)

coll 6 7

cyy целое число (0)

ччч 15

Ответы [ 3 ]

2 голосов
/ 16 июня 2020

Вы можете использовать unlist, чтобы получить id из dt_tb$id и relist, чтобы вернуться к исходной структуре.

i <- apply(is.na(dt_tb) | dt_tb=="NA", 2, which)
relist(dt_tb$id[unlist(i)], i)
#$id
#numeric(0)
#
#$coll
#[1] 6 7
#
#$cyy
#numeric(0)
#
#$hhh
#[1] 15
1 голос
/ 16 июня 2020

Вы можете использовать which с arr.ind = TRUE, чтобы получить индекс строки и столбца, где присутствует NA или "NA". Затем вы можете использовать split, чтобы получить именованный список.

mat <- which(is.na(dt_tb) | dt_tb == 'NA', arr.ind = TRUE)
split(dt_tb$id[mat[, 1]], names(dt_tb)[mat[, 2]])

#$coll
#[1] 6 7

#$hhh
#[1] 15
0 голосов
/ 16 июня 2020

вы можете использовать complete.cases(dt_tb)

install.packages("devtools")
install.packages("data.table")
library(devtools)
library(data.table)

dt_tb <- data.table(id = c(5, 6, 7, 15),
                    coll = c("this", NA,"NA", "text"),
                    cyy = c(TRUE, FALSE, TRUE, TRUE),
                    hhh = c(2.5, 4.2, 3.2, NA),
                    stringsAsFactors = FALSE)


complete.cases(dt_tb) # returns: TRUE FALSE  TRUE FALSE

which(!complete.cases(dt_tb)) # return row numbers: 2 4

dt_tb[!complete.cases(dt_tb),] # returns: rows with missing data/na's

обновление:

dt_tb[which(!complete.cases(dt_tb)),1] #to return ID's

id
1:  6
2: 15
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...