Измените пустые ячейки на " NA"

здесь ссылке мои данные.

моя цель-назначить " NA " всем пустым ячейкам независимо от категориальных или числовых значений. Я использую НС.strings="". Но это не присвоение NA всем пустым ячейкам.

## reading the data
dat <- read.csv("data2.csv")
head(dat)
  mon hr        acc   alc sex spd axles door  reg                                 cond1 drug1
1   8 21 No Control  TRUE   F   0     2    2      Physical Impairment (Eyes, Ear, Limb)     A
2   7 20 No Control FALSE   M 900     2    2                                Inattentive     D
3   3  9 No Control FALSE   F 100     2    2 2004                                Normal     D
4   1 15 No Control FALSE   M   0     2    2      Physical Impairment (Eyes, Ear, Limb)     D
5   4 21 No Control FALSE      25    NA   NA                                                D
6   4 20 No Control    NA   F  30     2    4                Drinking Alcohol - Impaired     D
       inj1 PED_STATE st rac1
1     Fatal      <NA>  F <NA>
2  Moderate      <NA>  F <NA>
3  Moderate      <NA>  M <NA>
4 Complaint      <NA>  M <NA>
5 Complaint      <NA>  F <NA>
6  Moderate      <NA>  M <NA>


## using na.strings
dat2 <- read.csv("data2.csv", header=T, na.strings="")
head(dat2)
  mon hr        acc   alc sex spd axles door  reg                                 cond1 drug1
1   8 21 No Control  TRUE   F   0     2    2 <NA> Physical Impairment (Eyes, Ear, Limb)     A
2   7 20 No Control FALSE   M 900     2    2 <NA>                           Inattentive     D
3   3  9 No Control FALSE   F 100     2    2 2004                                Normal     D
4   1 15 No Control FALSE   M   0     2    2 <NA> Physical Impairment (Eyes, Ear, Limb)     D
5   4 21 No Control FALSE      25    NA   NA <NA>                                  <NA>     D
6   4 20 No Control    NA   F  30     2    4 <NA>           Drinking Alcohol - Impaired     D
       inj1 PED_STATE st rac1
1     Fatal        NA  F   NA
2  Moderate        NA  F   NA
3  Moderate        NA  M   NA
4 Complaint        NA  M   NA
5 Complaint        NA  F   NA
6  Moderate        NA  M   NA

6 ответов


Я предполагаю, что вы говорите о строке 5 столбца "секс.- Это может быть в случае с data2.csv-файл, ячейка содержит пробел и, следовательно, не считается пустой R.

кроме того, я заметил, что в строках 5 столбцов "оси" и "дверь" исходные значения считываются из data2.csv-это строка "NA". Вы, вероятно, хотите рассматривать их как na.и струны тоже. Для этого

dat2 <- read.csv("data2.csv", header=T, na.strings=c("","NA"))

EDIT:

Я скачал данных2.csv. Да, в столбце строки 5 есть пробел "секс." Так вы хотите

na.strings=c(""," ","NA")

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

data= data.frame(cats=c('', ' ', 'meow'), dogs=c("woof", " ", NA))
apply(data, 2, function(x) gsub("^$|^ $", NA, x))

более удобное для глаз решение с помощью dplyr будет

require(dplyr)

## fake blank cells
iris[1,1]=""

## define a helper function
empty_as_na <- function(x){
    if("factor" %in% class(x)) x <- as.character(x) ## since ifelse wont work with factors
    ifelse(as.character(x)!="", x, NA)
}

## transform all columns
iris %>% mutate_each(funs(empty_as_na)) 

чтобы применить исправление только к подмножеству столбцов, вы можете указать интересующие столбцы, используя синтаксис сопоставления столбцов dplyr. Пример:mutate_each(funs(empty_as_na), matches("Width"), Species)

в случае, если таблица содержит даты, вы должны рассмотреть возможность использования больше typesafe версия ifelse


недавно я столкнулся с аналогичными проблемами. Это то, что сработало для меня, если переменная числовая, то простая df$Var[df$Var == ""] <- "NA" должно хватить. Но если переменная является фактором, то вам нужно сначала преобразовать ее в символ, а затем заменить "" ячейки со значение которое вы хотите, и преобразовать его обратно в фактор. Так что в данном случае, ваша переменная пола, я предполагаю, что это будет фактор, и если вы хотите заменить пустую ячейку, Я бы сделал следующее:

df$Var <- as.character(df$Var)
df$Var[df$Var==""] <- "NA"
df$Var <- as.factor(df$Var)

Не могли бы вы просто использовать

dat <- read.csv("data2.csv",na.strings=" ",header=TRUE)

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


вызов dplyr пакет путем установки от cran в r

library(dplyr)

(file)$(colname)<-sub("-",NA,file$colname) 

он преобразует всю пустую ячейку в определенном столбце как NA

если столбец содержит " -","", 0, как это изменить его в коде в соответствии с типом пустой ячейки

например. если я получаю пустую ячейку типа ""вместо" -", то используйте этот код:

(file)$(colname)<-sub("", NA, file$colname)