Найдите NA и визуализируйте это - PullRequest
0 голосов
/ 04 февраля 2020

У меня есть данные как:

MyData.csv <- "
0, 980, 888, 720,987,543
0, 880, 999, 820,990, NA, NA, 898, 780,987
1, 945, 856, 767,745,883
2, 780, 899, 920, NA, NA, NA, 998, 870,787
2, 800, 900, 822,999,880, 988, 899"

Я хочу найти одну строку с NA для визуализации. я попытался прочитать данные с помощью read.table ()

data <-read.table("MyData.csv", sep = ",", strip.white = TRUE)
which(data[, 2:ncol(data)]== is.na(data[, 2:ncol(data)]))

, но у меня возникла ошибка в первой строке кода, так как у меня разная длина строк, и я не уверен, что я использую правильный подход для поиска в хотя бы одну строку (я не хочу читать все данные) с NA, чтобы я мог построить ее.

Ответы [ 2 ]

0 голосов
/ 05 февраля 2020

Если вам известно количество столбцов в вашем файле, вы можете попробовать заменить первую строку на

data <- read.table("MyData.csv", header = FALSE, sep = ",",
           col.names = paste0("V",seq_len(n.cols)), fill = TRUE)

на n.cols количество столбцов в файле.

Затем вы можете найти индексы строк, в которых есть хотя бы один NA с

na.rows <- which(apply(data, 1, function(x) any(is.na(x))))

Наконец, вы можете получить доступ к любой строке с нужными вам NA следующим образом

data[na.rows[1],]
data[na.rows[2],]
...
0 голосов
/ 04 февраля 2020
  1. Вы работаете с данными через запятую, поэтому read.csv вместо read.table.

  2. Обычно первый аргумент является именем файла, поэтому он ищет файл с именем "MyData.csv". Это выглядит нормально (так как вы назвали свою переменную таким образом), но здесь я думаю, что вы должны смотреть на объект с именем MyData.csv. Здесь, я думаю, text=MyData.csv.

  3. Ваши образцы данных здесь не имеют header=, а read.csv по умолчанию имеет заголовок, поэтому header=FALSE.

В конечном итоге,

x <- read.csv(text=MyData.csv, header=FALSE)
x
#   V1  V2  V3  V4  V5  V6   V7  V8  V9 V10
# 1  0 980 888 720 987 543       NA  NA  NA
# 2  0 880 999 820 990  NA   NA 898 780 987
# 3  1 945 856 767 745 883       NA  NA  NA
# 4  2 780 899 920  NA  NA   NA 998 870 787
# 5  2 800 900 822 999 880  988 899  NA  NA

Чтобы получить тех, у кого есть хотя бы один NA:

x[!complete.cases(x),]
#   V1  V2  V3  V4  V5  V6   V7  V8 V9 V10
# 1  0 980 888 720 987 543       NA NA  NA
# 3  1 945 856 767 745 883       NA NA  NA
# 5  2 800 900 822 999 880  988 899 NA  NA

Если вам нужен только один из них, вы можете всегда используйте первое (добавьте [1,] к этой строке кода) или пример из них.

xsamp <- x[!complete.cases(x),]
set.seed(42)
xsamp[sample(nrow(xsamp), size=1),]
#   V1  V2  V3  V4  V5  V6   V7  V8 V9 V10
# 5  2 800 900 822 999 880  988 899 NA  NA
xsamp[sample(nrow(xsamp), size=1),]
#   V1  V2  V3  V4  V5  V6   V7  V8 V9 V10
# 5  2 800 900 822 999 880  988 899 NA  NA
xsamp[sample(nrow(xsamp), size=1),]
#   V1  V2  V3  V4  V5  V6 V7 V8 V9 V10
# 1  0 980 888 720 987 543    NA NA  NA
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...