gpt4 book ai didi

r - 如果任何行包含子字符串,则标记

转载 作者:行者123 更新时间:2023-12-03 08:58:06 27 4
gpt4 key购买 nike

我有一个字符变量数据集:

col1 = c("a","b","c")
col2 = c("a","b_a","d")
df = data.frame(col1,col2)

col1 col2
1 a a
2 b b_a
3 c d

我想创建一个变量 a,如果该行中的任何值包含子字符串“a”,则该变量 a 会标记为 1,0。

  col1 col2 a
1 a a 1
2 b b_a 1
3 c d 0

我的尝试如下。它并没有完全做到这一点,因为我相信如果数据帧中的任何值包含子字符串而不是行,则它需要 TRUE

df["a"] = ifelse(any(sapply(df,function(x) str_detect(x,"a")),TRUE),1,0)

我的想法是,使用 ifelse 语句时,ifelse 语句中的任何函数仅计算 df[i,] 而不是整个dataframe,其中 i 是它正在查看的行。事实似乎并非如此。

  1. 如何构建我正在寻找的数据框?请注意,在我的真实数据集中,有 100 多列,因此将它们全部列出来是没有意义的。

  2. 为什么 ifelse 不只计算 df 的第 i 行,而不是整个 df

请注意,之前的问题仅查看 at one variable ,我正在查看所有变量,因此这不是重复的。

最佳答案

您可以使用

grepl('a', paste0(df$col1, df$col2))

或者概括为任意数量的列

grepl('a',  do.call(paste0, df))

还有第三个选项,如果您要搜索多字符子字符串而不是单个字母,这可能更安全。在这种情况下,您可能希望避免使用 paste ,以便例如在向量 c('xa', 'bx') 中搜索 'ab' 不会给出误报。在这种情况下,我们可以使用:

substr = 'a'
as.logical(colSums(apply (df, 1, function(x) grepl(substr, x))))

关于r - 如果任何行包含子字符串,则标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53583758/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com