【发布时间】:2017-12-22 12:36:30
【问题描述】:
我想在我的数据框中创建一个新列,该列是 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)
【问题讨论】:
-
试试
Map(grepl, "CHINA|CHINESE|SINO", M) -
我不确定 Map 的作用,但它给出了这个输出 $
CHINA|CHINESE|SINO[1] TRUE FALSE FALSE $[1] FALSE TRUE FALSE $ [1] FALSE假 假。它似乎在整个数据框上运行,也没有添加新列。 -
它是
list格式。您可以通过包装data.frame将其转换为 data.frame 或将其分配给列M[] <- Map(grepl, "CHINA|CHINESE|SINO", M) -
在这种情况下,它会覆盖不应该发生的值。
-
不清楚您的预期输出