2016-12-20 77 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]