R - 用条件语句和子字符串替换数据框中的值
R - Replacing values in dataframes with conditional statements and substrings
我有一个数据框 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_start <- grep("^TD1$", names(df))
idx_end <- grep("^TD40$", names(df))
df$Category <- apply(df, 1, function(x) {
ifelse(sum(grepl("^Z50", x[idx_start:idx_end])) > 0,
"Surgery", df$Category)
})
您可以使用 grepl
更改代码:
library(dplyr)
df %>%
rowwise()%>%
mutate(Category = if(any(grepl('^Z50', c_across(starts_with("TD")))))
"Surgery" else Category)
我有一个数据框 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_start <- grep("^TD1$", names(df))
idx_end <- grep("^TD40$", names(df))
df$Category <- apply(df, 1, function(x) {
ifelse(sum(grepl("^Z50", x[idx_start:idx_end])) > 0,
"Surgery", df$Category)
})
您可以使用 grepl
更改代码:
library(dplyr)
df %>%
rowwise()%>%
mutate(Category = if(any(grepl('^Z50', c_across(starts_with("TD")))))
"Surgery" else Category)