[英]R: Remove dataframe elements that contain a specific character
數據框包括包含特定字符(例如“ <”)的字符串:
DF <- data.frame(c(1,"<2",3),c("< 4",5,6),c(7,8,"<"),stringsAsFactors = FALSE)
我要刪除(例如轉換為NA)包含字符“ <”的那些元素。 我可以使用grep()通過列或行來做到這一點。 可以一次在整個數據框中完成此操作嗎? (最好有一個內襯)
@Ronak在上面的評論中給出的一線可能是此處進行的最簡單,最優雅的方法。 話雖如此,如果您需要搜索特定的字符串以替換NA
,那么這里是基本R選項:
data.frame(lapply(DF, function(x) { ifelse(grepl(".*<.*", x), NA, x) }))
這將用NA
替換數據幀中包含<
任何地方的每個條目,並且您可以輕松擴展以使用grepl
來處理任何模式。
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.