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

61
задан 12 June 2014 в 00:35

2 ответа

Можно также использовать mutate_at в dplyr

dat <- dat %>%
mutate_at(vars(colnames(.)),
        .funs = funs(ifelse(.=="", NA, as.character(.))))

Избранные отдельные столбцы для изменения:

dat <- dat %>%
mutate_at(vars(colnames(.)[names(.) %in% c("Age","Gender")]),
        .funs = funs(ifelse(.=="", NA, as.character(.))))

С [1 113] (dplyr 0.8.0 выше) способ, которым это должно быть записано, изменился. Прежде чем это было, funs() в .funs (funs(name = f(.)). Вместо funs, теперь мы используем list (list(name = ~f(.)))

Примечание, что существует также намного более простой способ перечислить имена столбцов! (и название работы индекса столбца и индекса столбца)

dat <- dat %>%
mutate_at(.vars = c("Age","Gender"),
    .funs = list(~ifelse(.=="", NA, as.character(.))))
1
ответ дан 31 October 2019 в 15:10

Это должно добиться цели

dat <- dat %>% mutate_all(na_if,"")
7
ответ дан 31 October 2019 в 15:10