R:删除包含特定字符

时间:2017-10-03 01:56:53

标签: r dataframe

数据框包含包含特定字符的字符串(例如“<”):

DF <- data.frame(c(1,"<2",3),c("< 4",5,6),c(7,8,"<"),stringsAsFactors = FALSE)

我想删除(例如转换为NA)那些包含字符“&lt;”的元素。我可以通过grep()的列或行来完成此操作。这可以在整个数据框架中一次完成吗? (一个班轮首选)

2 个答案:

答案 0 :(得分:3)

@Ronak在上面的评论中给出的单行可能是最简单,最优雅的方式。话虽如此,如果您需要搜索特定字符串以替换为NA,那么这里是基本R选项:

data.frame(lapply(DF, function(x) { ifelse(grepl(".*<.*", x), NA, x) }))

这将使用<替换包含NA的数据框中的每个条目,并且您可以轻松扩展以处理使用grepl的任何模式。

答案 1 :(得分:0)

来自dplyr的解决方案。

library(dplyr)

DF2 <- DF %>% mutate_all(~ifelse(grepl("<", .), NA, .))
DF2
  c.1....2...NA. c....4...5..6. c.7..8......
1              1           <NA>            7
2           <NA>              5            8
3           <NA>              6         <NA>

来自purrr

的解决方案
library(purrr)

DF2 <- DF %>% map_dfc(~ifelse(grepl("<", .), NA, .))
DF2
# A tibble: 3 x 3
  c.1....2...NA. c....4...5..6. c.7..8......
           <chr>          <chr>        <chr>
1              1           <NA>            7
2           <NA>              5            8
3           <NA>              6         <NA>

来自data.table

的解决方案
library(data.table)
DF2 <- setDT(DF)[, lapply(.SD, function(x) ifelse(grepl("<", x), NA, x))]
DF2
   c.1....2...NA. c....4...5..6. c.7..8......
1:              1             NA            7
2:             NA              5            8
3:             NA              6           NA