我有一个这样的数据框(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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句