2016-12-20 76 views
2

我在格式的数据帧:删除相邻的重复r中

site_domain <- c('ebay.com','facebook.com','facebook.com','ebay.com','ebay.com','auto.com','ebay.com','facebook.com','auto.com','ebay.com','facebook.com','facebook.com','ebay.com','facebook.com','auto.com','auto.com') 
id <- c(1, 1, 1,2,2,3,3,3,3,4,4,4,5,5,5,5) 
file0 <- as.data.frame(cbind(site_domain,id)) 

我做了一组由“ID”来获得数据:

library(dplyr) 
xx <- as.data.frame(file0 %>% 
         group_by(id) %>% 
         summarise(pages=paste(site_domain, collapse='_'))) 

的数据是这样的:

1 ebay.com_facebook.com_facebook.com 
2 ebay.com_ebay.com 
3 auto.com_ebay.com_facebook.com_auto.com 
4 ebay.com_facebook.com_facebook.com 
5 ebay.com_facebook.com_auto.com_auto.com 

但是我想删除重复相邻,所以我要出去放像:

1 ebay.com_facebook.com 
2 ebay.com 
3 auto.com_ebay.com_facebook.com_auto.com 
4 ebay.com_facebook.com 
5 ebay.com_facebook.com_auto.com 

我该如何做到这一点。

回答

2

我们可以使用values财产rle删除相邻的重复。

library(dplyr) 
file0 %>% 
    group_by(id) %>% 
    summarise(pages=paste(rle(as.character(site_domain))$values, collapse='_')) 

#  id         pages 
# <fctr>         <chr> 
#1  1     ebay.com_facebook.com 
#2  2        ebay.com 
#3  3 auto.com_ebay.com_facebook.com_auto.com 
#4  4     ebay.com_facebook.com 
#5  5   ebay.com_facebook.com_auto.com 
1

随着unique功能:

xx <- as.data.frame(file0 %>% 
         group_by(id) %>% 
         summarise(pages=paste(unique(site_domain), collapse='_'))) 

xx 

# id       pages 
#1 1   ebay.com_facebook.com 
#2 2      ebay.com 
#3 3 auto.com_ebay.com_facebook.com 
#4 4   ebay.com_facebook.com 
#5 5 ebay.com_facebook.com_auto.com      
+0

这看起来不错,但是我在第三行看到:输出应该是'auto.com_ebay.com_facebook.com_auto.com',但是这种方法给出:'aut o.com_ebay.com_facebook.com' ..任何帮助我们如何修改这个。 – PSraj

+0

是的,它可能我会用新方法 – OdeToMyFiddle

1

很容易分组

 file0 <- file0 [!duplicated(file0),] 


     site_domain id 
     1  ebay.com 1 
     2 facebook.com 1 
     4  ebay.com 2 
     6  auto.com 3 
     7  ebay.com 3 
     8 facebook.com 3 
     10  ebay.com 4 
     11 facebook.com 4 
     13  ebay.com 5 
     14 facebook.com 5 
     15  auto.com 5 

之前删除重复的,那么你可以按ID数据

  id       pages 
      1 1   ebay.com_facebook.com 
      2 2      ebay.com 
      3 3 auto.com_ebay.com_facebook.com 
      4 4   ebay.com_facebook.com 
      5 5 ebay.com_facebook.com_auto.com 
+0

来更新答案,但这个结果也是接近的,但输出应该是:'auto.com_ebay.com_facebook.com_auto.com',但是这种方法也给出了:'auto.com_ebay.com_facebook.com'。任何帮助我们如何修改这个 – PSraj

2

这里是data.table

library(data.table) 
setDT(file0)[, unique(site_domain), by= .(id, grp=rleid(site_domain)) 
      ][, .(site=paste(V1, collapse="_")) , id] 
# id         site 
#1: 1     ebay.com_facebook.com 
#2: 2        ebay.com 
#3: 3 auto.com_ebay.com_facebook.com_auto.com 
#4: 4     ebay.com_facebook.com 
#5: 5   ebay.com_facebook.com_auto.com 

或用.I创建索引,提取行的选项,paste的 '身份证'

i1 <- setDT(file0)[, .I[!duplicated(site_domain)], .(id, grp = rleid(site_domain))]$V1 
file0[i1, .(site = paste(site_domain, collapse="_")), by = id]