R-用条件语句和子字符串替换数据帧中的值

R-用条件语句和子字符串替换数据帧中的值,r,if-statement,replace,grepl,R,If Statement,Replace,Grepl,我有一个数据帧df 这是一个包含数百列数据的大型数据帧。特别是40列具有类似名称的数据TD1、TD2。。。。。TD40。我希望扫描每一行,如果任何值以Z50开头,我希望列类别中的行值更改为“外科手术”。因此,在上述示例中,行1和3将从“心脏”转换为“手术” 在一个类似的示例中,当整个代码为Z50时,我使用了: df %>% rowwise()%>% mutate(Category = if(any(c_across(starts_with("TD")) == &

我有一个数据帧df

这是一个包含数百列数据的大型数据帧。特别是40列具有类似名称的数据TD1、TD2。。。。。TD40。我希望扫描每一行,如果任何值以Z50开头,我希望列类别中的行值更改为“外科手术”。因此,在上述示例中,行1和3将从“心脏”转换为“手术”

在一个类似的示例中,当整个代码为Z50时,我使用了:

df %>%
rowwise()%>%
mutate(Category = if(any(c_across(starts_with("TD")) == "Z50")) 
                   "Surgery" else Category)
现在我只想让前3个字符等于Z50。我假设我会使用grepl函数,但不确定如何将其合并到原始代码中。嗯,到目前为止,它对我不起作用。
有什么想法吗?。谢谢

我们可以尝试使用
apply
grepl
作为基本R选项:


idx\u start您可以使用
grepl
更改代码,如下所示:

library(dplyr)

df %>%
  rowwise()%>%
  mutate(Category = if(any(grepl('^Z50', c_across(starts_with("TD"))))) 
                       "Surgery" else Category)

谢谢你,蒂姆。你的建议似乎奏效了。但是,在代码执行后,我收到一条消息说“有50个或更多的警告”。有什么值得我担心的吗?@dapdot1最好是看看警告。最有可能的情况是,它们与隐式转换和类似的事情有关。最重要的是生成的结果符合您的期望。仔细检查,代码没有起作用。如果适用,它似乎已正确地将列类别更改为“手术”。然而,它似乎莫名其妙地将类别中的所有其他列值更改为列中的第一个值“心脏”。所以写在诸如“Stroke”等值上。非常奇怪,我意识到代码idx_start无法区分列TD1和TD11,因此可能是警告消息的一部分。@dapdot1检查更新的答案。GRIP用于代码> ^ TD1 $< /代码>等。请考虑通过点击左边的检查标记来为您工作。每个帖子只能接受一个答案。