Измените пустые ячейки на " 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)