Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
根据R中的字序列保留数据帧的特定行_R_Regex_Text - Fatal编程技术网

根据R中的字序列保留数据帧的特定行

根据R中的字序列保留数据帧的特定行,r,regex,text,R,Regex,Text,我有这样一个数据帧(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', 'aus

我有这样一个数据帧(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'))

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

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  
库(tidyverse)
df%>%
分组依据(id)%>%
过滤器(!map_lgl(seq_沿途(value))~any(if(length(value)==1)FALSE else str_detect(value[-.x],paste0(“^”,value[.x]))))
#一个tibble:7x2
#组:id,值[7]
id值
1澳大利亚悉尼
2巴西
3澳大利亚
4.3美国
5.4澳大利亚悉尼兰德威克酒店
6.4澳大利亚悉尼环形码头
7.5澳大利亚悉尼

非常感谢您。只有一个问题。如果我既有“澳大利亚悉尼兰德威克”又有“澳大利亚悉尼环形码头”,我想保留这两个,那该怎么办?你可以用多少个单词来匹配?如果您的id中有“澳大利亚”、“澳大利亚悉尼”、“澳大利亚悉尼兰德威克”和“澳大利亚悉尼环形码头”,应保留哪一个?你应该编辑你的问题,以便明确确切的排除标准和预期结果。例如,让第一个单词比较它们,如果它们不同,则保留它们,但如果它们相同,则转到第二个单词比较它们,依此类推。我编辑了问题。。谢谢你非常有用的回答。你能纠正你的例子吗,现在它给出了一个错误。您还可以显示共享数据的预期输出吗?对不起,我修复了错误。我的预期输出是获得第2:5、7、9:10行