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

标签 r

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

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/

相关文章:

r - 获取距离矩阵单元格的标签

r - 检查传递的参数是否存在

r - 是否可以使用两个以上的字符作为情节中的点

r -\Sexpr[results=rd]{} 在 Rd 中究竟是什么意思?

r - 如何在巨大的数据框中用零替换 NaN 值?

r - 市场篮分析 - 具有可变数量功能的单一模型?

r - r 中的条件概率

r - 在R中过滤hadoop reducer函数中的键值对

r - 使用 geom_dotplot 更改点图的 y 轴以反射(reflect)实际计数

r - 使用 dplyr 平均排除异常值