是否有一种优雅的方法来查找不包含特定字符串/字符的值并在 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-
如前所述,这是期望的结果,但实际使用时运行时间太慢了。
也许像这样?
df |>
mutate(across(everything(),
~if_else(stringr::str_detect(.x, "-"),
.x, ".")))
x y Z
1 . -water .
2 d-g . .
3 . . jump-