Заменить строки, содержащие только пробелы, на NA - PullRequest
1 голос
/ 24 мая 2019

У меня есть кадр данных, содержащий столбцы с именами от Q1 до Q98.Эти столбцы содержат строки ("This is a string"), однако некоторые записи содержат только различное количество пробелов (" ", " ").Я хотел бы заменить все записи, содержащие только пробелы, на NA.

. Рассмотрим фрейм данных, созданный с помощью следующего кода:

df<-data.frame(Q1=c("Test test","Test"," ","  "),Q2=c("Sample sample","    ","Sample","Sample"))

Решение может изменить указанный выше фрейм данных df, такойчто df$Q1[3:4]==NA и df$Q2[2]==NA.

Я уже пытался использовать grepl(" ", df), но это позволяет мне заменять все записи, которые содержат пробелов, а не только те, которые состоят чисто из заготовок.

Ответы [ 5 ]

5 голосов
/ 24 мая 2019

Одна dplyr возможность может быть:

df %>%
 mutate_all(~ ifelse(nchar(trimws(.)) == 0, NA_character_, .))

        Q1            Q2
1 Test test Sample sample
2      Test          <NA>
3      <NA>        Sample
4      <NA>        Sample

Или то же самое с base R:

df[] <- lapply(df, function(x) ifelse(nchar(trimws(x)) == 0, NA_character_, x))

Или:

df %>%
 mutate_all(~ trimws(.)) %>%
 na_if(., "")
0 голосов
/ 24 мая 2019

Мы можем сделать это за base R

df[trimws(as.matrix(df)) == ''] <- NA
df
#        Q1            Q2
#1 Test test Sample sample
#2      Test          <NA>
#3      <NA>        Sample
#4      <NA>        Sample

Или с replace

library(dplyr)
df %>%
     mutate_all(list(~ replace(., trimws(.)=="", NA)))
#        Q1            Q2
#1 Test test Sample sample
#2      Test          <NA>
#3      <NA>        Sample
#4      <NA>        Sample
0 голосов
/ 24 мая 2019

Применить sub ко всем столбцам пробелов:

lapply(df, FUN = sub, pattern = "^\\s*$", replacement = NA)
0 голосов
/ 24 мая 2019

A dplyr + stringr опция

library(dplyr)
library(stringr)
df %>% mutate_all(~str_replace(., "^\\s+$", NA_character_))
#         Q1            Q2
#1 Test test Sample sample
#2      Test          <NA>
#3      <NA>        Sample
#4      <NA>        Sample
0 голосов
/ 24 мая 2019

Вы можете искать строки с началом ^, затем одним или несколькими пробелами +, затем концом $.

df[sapply(df, function(x) grepl('^ +$', x))] <- NA

#          Q1            Q2
# 1 Test test Sample sample
# 2      Test          <NA>
# 3      <NA>        Sample
# 4      <NA>        Sample

Некоторые другие возможности

df[] <- lapply(df, function(x) replace(x, grep('^ +$', x), NA))
#or 
replace(df, sapply(df, function(x) grepl('^ +$', x)), NA)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...