r - 一列的一部分是否存在于另一列中?R
问题描述
我有这个数据框:
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
.
我从这个建议中尝试了这个
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]
并且 flag 具有所有 NO 值,即使您可以看到 46309 都存在于id_1
&id_2
中。
然后我从这个建议中尝试了这个
df$flag_2 <- str_detect(df$id_1, df$id_2)
我得到了 FALSEflag_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
?
解决方案
我不确定这是否是您的想法,我尝试过并取得了一些令人鼓舞的结果,但仍有改进的余地。为此,我0
从id_2
可能不是一个好的调用中删除了 2,但它有助于在这里进行模糊匹配。
df$flag <- sapply(1:nrow(df), function(x) agrepl(substr(df$id_2[x], 2, nchar(df$id_2[x])),
df$id_1[x], max.distance = 4))
df
id_1 id_2 flag
1 888046309 0003046309 TRUE
2 888046309 0003046309 TRUE
3 888046309 0003046309 TRUE
4 888046309 0003046309 TRUE
5 003046309 0003046309 TRUE
6 465798132 0003046309 FALSE
7 465798132 0003046309 FALSE
8 465798132 0003046309 FALSE
9 465798132 0003046309 FALSE
10 465798132 0003046309 FALSE
11 465798132 0003046309 FALSE
12 465798132 0003046309 FALSE
13 465798132 0003046309 FALSE
推荐阅读
- android - 在 Android 中使用 Tenserflow 计算与相机的物距
- asp.net-mvc - Kendo DataSourceRequest 对象中的反射 XSS
- flutter - 弹出警告框
- rest - Web API Core 3.1 中的参数绑定(字符串到整数)
- javascript - 如何在 li 上使用 onclick 事件来显示块(CSS)
- c# - 如何在页面最底部注册 ClientScript
- java - 如何在java中添加浮点数
- flutter - 你可以在 Flutter 中流式传输来自 s3 的视频吗?
- c - 为数组指针赋值
- python - 在 Ubuntu 上为 android 构建 WebRTC 时出错