我试图找出数据帧第一列中存在的字符串是否也存在于同一数据帧的另一列中?
col1 <- c("ISAACS INN",
"THIZAS PLACE",
"ZINIKO TAVERN",
"HANJIS RESTAURANT",
"ULTIMATE")
col2 <- c("ISAACS IS INN",
"HER THIZAS ARE PLACE",
"HIS ZINIKO NAME TAVERN SO",
"HANJIS SWEET HEIR RESTAURANT",
"THIS IS ULTIMATE NAME")
df <- data.frame(col1, col2, stringsAsFactors=F)
我跟着这个试图找到答案:
testdf <- as.data.frame(transform(df,
word_exists = mapply(grepl, pattern=df$col1,
x=df$col2) & nzchar(df$col1)))
哪次没能归还我正在寻找的东西。
我在上面的代码中做错了什么?
有替代品吗?
我得到的结果:
答案 0 :(得分:1)
这是你在找什么?
lapply(df$col1, function(x) grepl(paste(strsplit(x,' ')[[1]], collapse='.*'), df$col2))
我刚刚将df$col1
中的每一行更改为正则表达式,这两个单词之间可以包含任何内容(.*
)。
答案 1 :(得分:1)
如果您正在尝试查找各个部分,这里有一个hackish tidyverse
替代方案:
df %>%
mutate(id = col1) %>%
separate_rows(col1, sep =" ") %>%
rowwise() %>%
mutate( flg = if_else(grepl(col1,col2), 1, 0)) %>%
group_by(id) %>%
mutate(word_exists = prod(flg)) %>%
ungroup() %>%
select(col1 = id, col2, word_exists) %>%
unique()
它将pattern
拆分为单独的行,并检查每个组件。然后给出一个肯定的结果,pattern
的所有部分都给出了积极的结果。
输出:
col1 col2 word_exists
<chr> <chr> <dbl>
1 ISAACS INN ISAACS IS INN 1
2 THIZAS PLACE HER THIZAS ARE PLACE 1
3 ZINIKO TAVERN HIS ZINIKO NAME TAVERN SO 1
4 HANJIS RESTAURANT HANJIS SWEET HEIR RESTAURANT 1
5 ULTIMATE THIS IS ULTIMATE NAME 1