【发布时间】:2021-08-07 22:17:53
【问题描述】:
我有这个数据框:
df <- data.frame(id_1=c('888046309', '888046309', '888046309', '888046309', '003046309', '465798132', '465798132', '465798132', '465798132', '465798132', '465798132', '465798132', '465798132'),
id_2=c('0003046309', '0003046309', '0003046309', '0003046309', '0003046309', '0003046309', '0003046309', '0003046309', '0003046309', '0003046309', '0003046309', '0003046309', '0003046309'))
我想创建一个列来指示id_2 的一部分在id_1 中的位置。
我从这个suggestion尝试过这个
i <- sapply(seq_along(df$id_2), function(i) grepl(df$id_2[i], df$id_1[i]))
df$flag <- c("No", "Yes")[i + 1L]
尽管您可以看到 id_1 和 id_2 中都存在 46309,但 flag 具有所有 NO 值。
然后我从这个suggestion尝试了这个
df$flag_2 <- str_detect(df$id_1, df$id_2)
我得到了flag_2 的错误
最后我尝试了这个,就像flag_2一样,我得到了flag_3的所有错误。
df <- df %>%
mutate(flag_3 = c('No', 'Yes')[1+str_detect(id_1, as.character(id_2))])
是否可以编辑这些建议以指示id_2 的某些部分是否存在于id_1 中?
【问题讨论】:
-
也许this 有帮助
-
此建议末尾列出的函数仅允许前导数字相同的情况。非常感谢,但它没有用。
-
所以,为了清楚起见,仍然需要将 1 个字符重叠标记为“是”?
-
好问题。四个或更多怎么样?
-
这个答案似乎对您的问题有效,尽管您需要添加
nchar( ) >= 4:stackoverflow.com/a/48702045/5805670