Как определить, какой столбец NA был добавлен путем принуждения - PullRequest
0 голосов
/ 08 октября 2018

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

данные clean_tab:

A tibble: 3 x 3
          a b                   c    
      <dbl> <chr>               <chr>
    1   0.5 4-2                 5    
    2   0.1 0.29999999999999999 3-1  
    3   0.3 0.40000000000000002 4 

Код, применяемый к данным:

b <- c(1,2,3)
clean_tab[, b] <- sapply(clean_tab[, b], as.numeric)
View(clean_tab)

Результирующие предупреждающие сообщения и вывод:

Warning messages:
1: In lapply(X = X, FUN = FUN, ...) : NAs introduced by coercion
2: In lapply(X = X, FUN = FUN, ...) : NAs introduced by coercion
> clean_tab
# A tibble: 3 x 3
      a     b     c
  <dbl> <dbl> <dbl>
1   0.5  NA       5
2   0.1   0.3    NA
3   0.3   0.4     4

В этом случаетак как это меньшая таблица, я могу четко видеть, где были добавлены АН.Как мне определить, какие столбцы (и даже более конкретно строки и столбцы), в которые был добавлен NA, если таблица была намного больше?

Спасибо за любую помощь.

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

Один из подходов мог бы заключаться в том, чтобы попытаться преобразовать каждый столбец в числовой, а затем установить, возникли ли какие-либо значения NA в результате этой попытки:

df <- data.frame(a=c(0.5, 0.1, 0.3),
                 b=c("4-2", "0.29999999999999999", "0.40000000000000002"),
                 c=c("5", "3-1", "4"), stringsAsFactors=FALSE)

names(df)[sapply(df, function(x) { sum(is.na(as.numeric(x))) > 0 })]

[1] "b" "c"
0 голосов
/ 08 октября 2018

Мы можем использовать which с arr.ind как ИСТИНА, чтобы вернуть индекс строки / столбца NA элементов

which(is.na(clean_tab), arr.ind = TRUE)
#   row col
#1   1   2
#2   2   3

, поскольку входные данные - tibble,мы можем использовать tidyverse методы для преобразования

library(tidyverse)
library(magrittr)
clean_tab %<>%
         mutate_at(b, as.numeric)

data

clean_tab <- structure(list(a = c(0.5, 0.1, 0.3), b = c("4-2", 
    "0.29999999999999999", "0.40000000000000002"), 
c = c("5", "3-1", "4")), row.names = c("1", 
"2", "3"), class = c("tbl_df", "tbl", "data.frame"))
...