r - 根据R中的单词序列保留数据帧的特定行
问题描述
我有一个这样的数据框(df)。我想要做的是检查每个 ID 的值,如果有两个以相同单词开头的字符串,我想比较它们以保持不同的值。
df <- data.frame(id = c(1,1,2,3,3,4,4,4,4,5),
value = c('australia', 'australia sydney', 'brazil',
'australia', 'usa', 'australia sydney', 'australia sydney randwick', 'australia', 'australia sydney circular quay', 'australia sydney'))
我想获取第一个词来比较它们,如果它们不同,则保留两者,但如果它们相同,则转到第二个词来比较它们,依此类推......所以对于 ID 1,我想将行与值“澳大利亚悉尼”,对于 ID 4,我想保留“澳大利亚悉尼圆形码头”和“澳大利亚悉尼兰德威克”。对于此示例,我需要获取行 2:5、7、9,10
解决方案
根据您的编辑,您可以在组内检查是否有任何条目与任何其他条目的开头匹配,并删除符合以下条件的条目:
library(tidyverse)
df %>%
group_by(id) %>%
filter(!map_lgl(seq_along(value), ~ any(if (length(value) == 1) FALSE else str_detect(value[-.x], paste0("^", value[.x])))))
# A tibble: 7 x 2
# Groups: id, value [7]
id value
<dbl> <chr>
1 1 australia sydney
2 2 brazil
3 3 australia
4 3 usa
5 4 australia sydney randwick
6 4 australia sydney circular quay
7 5 australia sydney
推荐阅读
- javascript - 如何在Vue JS中的计算属性内设置全局变量
- python - 即使文件可用,文件位置问题
- python - Django - 使 python 对象在会话期间持续存在
- enterprise-architect - 为什么我不能在 Enterprise Architect 中将一个对象(类的实例)连接到另一个对象(类的实例)的特定属性?
- ios - 模拟器上的后台获取工作(我可以看到日志)但不能在真实设备上工作
- javascript - 保险丝盒和打字稿:意外令牌{
- windows - Win 7 中的命令行:由于某些脚本不再工作,我意外更改了什么
- ios - 如何显示或隐藏 AGSArcGISMapImageLayer 子图层
- c# - 加载具有依赖引用的程序集
- react-native - 使用索引将对象添加到redux中的数组