数据框包含包含特定字符的字符串(例如“<”):
DF <- data.frame(c(1,"<2",3),c("< 4",5,6),c(7,8,"<"),stringsAsFactors = FALSE)
我想删除(例如转换为NA)那些包含字符“&lt;”的元素。我可以通过grep()的列或行来完成此操作。这可以在整个数据框架中一次完成吗? (一个班轮首选)
答案 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