Измените пустые ячейки на «NA»
Вот ссылка моих данных.
Моя цель – назначить «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 F 2 Moderate F 3 Moderate M 4 Complaint M 5 Complaint F 6 Moderate M ## 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 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
- Как распространять столбцы с повторяющимися идентификаторами?
- Как объединить два файла RMarkdown (.Rmd) в один вывод?
- установить графики ggplot, чтобы иметь одинаковую ширину оси x и одно и то же пространство между точками
- duplicate 'row.names' не допускается ошибка
- Добавить объект в список в R в амортизированном постоянном времени, O (1)?
- Использование пакета rJava на Win7 64 бит с R
- Уровни уровня очистки (сведение нескольких уровней / меток)
- Использование динамических имен столбцов в `data.table`
- ggplot, линия чертежа между точками по граням
- Как отображать только целые значения на оси с помощью ggplot2
- Добавление новых столбцов в справочную таблицу data.table внутри функции, которая не всегда работает
- вычисление двойных интегралов в R быстро
- Импорт нескольких CSV-файлов в R
Я предполагаю, что вы говорите о столбце «стол» в строке 5. Это может быть так, что в файле data2.csv ячейка содержит пробел и, следовательно, не считается пустой R.
Кроме того, я заметил, что в строке 5 столбцов «оси» и «дверь» исходные значения, считанные из data2.csv, являются строкой «NA». Вы, вероятно, захотите относиться к ним как к nststrings. Сделать это,
dat2 <- read.csv("data2.csv", header=T, na.strings=c("","NA"))
РЕДАКТИРОВАТЬ:
Я загрузил ваши данные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 some NA 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)
Если таблица содержит даты, вы должны рассмотреть возможность использования более типичной версии ifelse
Недавно я столкнулся с подобными проблемами. Это то, что сработало для меня, если переменная является числовой, тогда достаточно простого df$Var[df$Var == ""] <- "NA"
. Но если переменная является фактором, тогда вам нужно сначала преобразовать ее в символ, а затем заменить ячейки ""
на нужное значение и преобразовать обратно в коэффициент. Так что, например, ваша переменная Sex, я предполагаю, что это будет фактором, и если вы хотите заменить пустую ячейку, я бы сделал следующее:
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)