查找数据框中不包含特定字符串的值并将其替换为R

问题描述 投票:0回答:1

是否有一种优雅的方法来查找不包含特定字符串/字符的值并在 R 中替换它们。我有点想要相反的

str_replace_all
,而不是替换所需的模式,而是保留它并替换其他所有内容。

我确实创建了一个有效的 for 循环,但实际数据集中有超过 15,000 行,对于任何实际目的来说都太慢了。

for 循环的代表

数据框。目标是保留带有“-”字符的任何值并忽略其他值:

df<- data.frame(x = c('cat', 'd-g', 'rat'),
            y = c('-water', 'air', 'earth'),
            Z = c('run', 'walk', 'jump-'))

在 for 循环末尾放置值的空数据框

empty.df<- data.frame(x = NULL,
                  y = NULL,
                  z = NULL)

循环

for(i in 1:ncol(df)){
  df_col <- df[,i]
  
  for(m in 1:length(df_col)){
    if(str_detect(df_col[m], '-|oov|usgs') == F %in% df_col){
      df_col[m] <- '.'
    }
  }
  empty.df<-rbind(empty.df, df_col)
 }

这里第一个循环将列划分为单独的向量并将它们分配给

df_col
对象。然后第二个循环遍历每个值,如果
FALSE
将它们替换为
.

结果:

>     empty.df
>         X... X.d.g. X....1
>     1      .    d-g      .
>     2 -water      .      .
>     3      .      .  jump-

如前所述,这是期望的结果,但实际使用时运行时间太慢了。

r string dataframe loops stringr
1个回答
0
投票

也许像这样?

df |>
  mutate(across(everything(),
                ~if_else(stringr::str_detect(.x, "-"),
                         .x, ".")))


    x      y     Z
1   . -water     .
2 d-g      .     .
3   .      . jump-
© www.soinside.com 2019 - 2024. All rights reserved.