【问题标题】:Keep specific rows of a data frame based on word sequence in R根据R中的单词序列保留数据帧的特定行
【发布时间】:2020-10-23 19:47:40
【问题描述】:

我有一个这样的数据框(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,我想保留值为“australia sydney”的行,对于 ID 4,我想保留“australia sydney circular quay”和“australia sydney randwick”。 对于此示例,我需要获取第 2:5、7、9,10 行

【问题讨论】:

  • 你能纠正你的例子吗,现在它给出了一个错误。您还可以显示共享数据的预期输出吗?
  • 抱歉,我修正了错误。我的预期输出是获得行 2:5, 7, 9:10

标签: r regex text


【解决方案1】:

根据您的编辑,您可以在组内检查任何条目是否与任何其他条目的开头匹配并删除匹配的条目:

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  

【讨论】:

  • 非常感谢。只有一个问题。如果我同时拥有“australia sydney randwick”和“australia sydney Circular Quay”,并且我想同时保留这两个选项,该怎么办? ?
  • 您可以匹配多少个单词?如果您的 id 中有“australia”、“australia sydney”、“australia sydney randwick”和“australia sydney circular quay”,应该保留哪个?您应该编辑您的问题,以便明确排除标准和预期输出。
  • 比如说让第一个词比较它们,如果它们不同,则保留两者,但如果它们相同,则转到第二个词进行比较,依此类推。
  • 我编辑了这个问题.. 谢谢你非常有帮助的回答。
猜你喜欢
  • 2022-01-01
  • 2020-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 2020-02-25
  • 1970-01-01
相关资源
最近更新 更多