gpt4 book ai didi

r - 跨多个指定列的 grepl

转载 作者:行者123 更新时间:2023-12-04 19:58:08 25 4
gpt4 key购买 nike

我想在我的数据框中创建一个新列,该列是 TRUE 还是 FALSE,具体取决于术语是否出现在两个指定的列中。
这是一些示例数据:

AB <- c('CHINAS PARTY CONGRESS','JAPAN-US RELATIONS','JAPAN TRIES TO')
TI <- c('AMERICAN FOREIGN POLICY', 'CHINESE ATTEMPTS TO', 'BRITAIN HAS TEA')
AU <- c('AUTHOR 1', 'AUTHOR 2','AUTHOR 3')
M <- data.frame(AB,TI,AU)

我可以为一列或另一列执行此操作,但我无法弄清楚如何为两列执行此操作。换句话说,我不知道如何将这两条不会相互覆盖的行组合起来。
M$China <- mapply(grepl, "CHINA|CHINESE|SINO", x=M$AB)
M$China <- mapply(grepl, "CHINA|CHINESE|SINO", x=M$TI)

指定列很重要,我不能选择整个 data.frame。我已经寻找了其他类似的问题,但似乎没有一个适用于我的案例,我无法适应任何现有的例子。这对我来说很有意义:
M$China <- mapply(grepl, "CHINA|CHINESE|SINO", x=(M$AB|M$TI)

最佳答案

使用:

M$China <- !!rowSums(sapply(M[1:2], grepl, pattern = "CHINA|CHINESE|SINO"))

给出:

> M
AB TI AU China
1 CHINAS PARTY CONGRESS AMERICAN FOREIGN POLICY AUTHOR 1 TRUE
2 JAPAN-US RELATIONS CHINESE ATTEMPTS TO AUTHOR 2 TRUE
3 JAPAN TRIES TO BRITAIN HAS TEA AUTHOR 3 FALSE


这是做什么的:
  • sapply(M[1:2], grepl, pattern = "CHINA|CHINESE|SINO")遍历两个 ABTI列并查看模式的一部分( "CHINA|CHINESE|SINO" )是否存在。
  • sapply -call 返回一个矩阵 TRUE/FALSE值(value)观:
            AB    TI
    [1,] TRUE FALSE
    [2,] FALSE TRUE
    [3,] FALSE FALSE
  • rowSums你查多少TRUE - 每行具有的值。
  • 通过添加 !!前面rowSums您转换来自 rowSums 的所有值-调用大于零到 TRUE和所有 eros 到 FALSE .
  • 关于r - 跨多个指定列的 grepl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47941680/

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