我正在嘗試從資料框的單元格中清除我的資料。我想洗掉一些字串,但gsub不知何故省略了“()”。我的代碼:
getridof <- c("(a)", "(40X)", "(5X)", "(10X_a)", "(10X)", "(_)")
for (i in 1:length(getridof)) {
df2$Sample <- gsub(getridof[i], "", df2$Sample)
}
但是執行腳本后“()”會留在單元格中嗎?
uj5u.com熱心網友回復:
使用gsub:
gsub("[()]", "", getridof)
[1] "a" "40X" "5X" "10X_a" "10X" "_"
使用stringr:
library(stringr)
str_remove_all(getridof, "[()]")
[1] "a" "40X" "5X" "10X_a" "10X" "_"
uj5u.com熱心網友回復:
這使用reduce和fixed = TRUE論點gsub:
library(purrr)
data <- c("(a)100", "(40X)33", "nothing")
getridof <- c("(a)", "(40X)", "(5X)", "(10X_a)", "(10X)", "(_)")
purrr::reduce(getridof,
~gsub(.y, "", .x, fixed = TRUE),
.init = data)
# [1] "100" "33" "nothing"
該purrr::reduce函式旨在替換您的 for 回圈。它遞回地洗掉每個不需要的字串data。
uj5u.com熱心網友回復:
一個可能的解決方案,但我不確定您是否只想洗掉括號:
library(tidyverse)
getridof <- c("(a)", "(40X)", "(5X)", "(10X_a)", "(10X)", "(_)")
getridof %>%
str_remove("^\\(") %>%
str_remove("\\)$")
#> [1] "a" "40X" "5X" "10X_a" "10X" "_"
對您的問題采取另一種解釋:
library(tidyverse)
getridof <- c("(a)", "(40X)", "(5X)", "(10X_a)", "(10X)", "(_)")
data <- c("(a)100", "(40X)33", "nothing", "zzzz(5X)", "22(10X_a)44", "yyy(10X)", "aa(_)b")
getridof <- getridof %>%
str_replace("\\(", "\\\\(") %>%
str_replace("\\)", "\\\\)") %>%
str_c(collapse = "|")
str_replace_all(data, getridof, "")
#> [1] "100" "33" "nothing" "zzzz" "2244" "yyy" "aab"
uj5u.com熱心網友回復:
添加引數fixed = TRUE完成了作業
df2$Sample <- gsub(getridof[i], "", df2$Sample, fixed = TRUE)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/434530.html
