R列检查是否包含来自另一列的值

时间:2020-04-29 15:26:18

标签: r dataframe contains grepl

R中是否可以检查一列中的值是否包含另一列中的值?在下面的示例中,我试图查看col2中的值是否包含在col1中的值中(独立地在每一行中),但收到警告消息:“参数'pattern'的长度> 1,并且仅使用第一个元素”。标志列的第一行/最后一行应显示“是”,第二行和第三行应显示“否”。任何有关解决方法的想法将不胜感激。

col1 <- c("R.S.U.L.C","S.I.W","P.U.E","A.E.N")
col2 <- c("R","U","I","N")

df2 <- data.frame(col1,col2)

df2$Flag <- ifelse(grepl(df2$col2,df2$col1),"Yes","No")

3 个答案:

答案 0 :(得分:2)

这可以与sapply/grepl组合使用。沿df2$colgrepl沿字符串df$col1循环。
单线很明显。

i <- sapply(seq_along(df2$col2), function(i) grepl(df2$col2[i], df2$col1[i]))
df2$Flag <- c("No", "Yes")[i + 1L]
df2
#       col1 col2 Flag
#1 R.S.U.L.C    R  Yes
#2     S.I.W    U   No
#3     P.U.E    I   No
#4     A.E.N    N  Yes

答案 1 :(得分:2)

df2$flag <- mapply(grepl, df2$col2, df2$col1)

grepl()的模式参数仅使用第一个元素:

请参见?grepl

如果提供了长度为2或更大的字符向量,则第一个 元素带有警告。

答案 2 :(得分:0)

我们可以使用str_detect,它对模式和字符串都进行了矢量化处理

library(dplyr)
library(stringr)
df2 <- df2 %>% 
     mutate(Flag = c('No', 'Yes')[1+str_detect(col1, as.character(col2))])
df2
#       col1 col2 Flag
#1 R.S.U.L.C    R  Yes
#2     S.I.W    U   No
#3     P.U.E    I   No
#4     A.E.N    N  Yes