2011-12-07 219 views
4

刪除重複柱組合我想刪除的sessionid,QF和從下面的數據從數據幀中的R

   sessionid    qf  qn   city 
1 9cf571c8faa67cad2aa9ff41f3a26e38  cat biddix   fresno 
2 e30f853d4e54604fd62858badb68113a caleb  amos     
3 2ad41134cc285bcc06892fd68a471cd7 daniel folkers     
4 2ad41134cc285bcc06892fd68a471cd7 daniel folkers     
5 63a5e839510a647c1ff3b8aed684c2a5 charles pierce   flint 
6 691df47f2df12f14f000f9a17d1cc40e  j franz prescott+valley 
7 691df47f2df12f14f000f9a17d1cc40e  j franz prescott+valley 
8 b3a1476aa37ae4b799495256324a8d3d carrie mascorro   brea 
9 bd9f1404b313415e7e7b8769376d2705 fred morales  las+vegas 
10 b50a610292803dc302f24ae507ea853a aurora  lee     
11 fb74940e6feb0dc61a1b4d09fcbbcb37 andrew price  yorkville 

我在數據讀取爲data.frame QN的重複的組合,並調用它MYDATA。 Heree是我到目前爲止的代碼,但我需要知道如何正確地對數據框架進行排序。其次刪除sessionid,qf和qn的重複組合。最後在一個直方圖中列出了字符qf

sortDATA<-function(name) 
{ 
#sort the code by session Id, first name, then last name 
sort1.name <- name[order("sessionid","qf","qn") , ] 
#create a vector of length of first names 
sname<-nchar(sort1.name$qf) 
hist(sname) 
} 

謝謝!

+0

從@ Joran的回答結束工作,然後你可以用陰謀情節'(DAT $ QF,拉斯= 2)'一個簡單的柱狀圖。 ('las'參數可以將xlabels旋轉90度)。 –

回答

16

duplicated()data.frame秒的方法,這是專爲剛剛這類任務:

df <- data.frame(a = c(1:4, 1:4), 
       b = c(4:1, 4:1), 
       d = LETTERS[1:8]) 

df[!duplicated(df[c("a", "b")]),] 
# a b d 
# 1 1 4 A 
# 2 2 3 B 
# 3 3 2 C 
# 4 4 1 D 
+0

如何去除這些交叉重複也? 它可以通過重複功能來完成嗎? –

1

爲了解決您的排序問題,在您的示例數據先讀:

dat <- read.table(text = "    sessionid    qf  qn   city 
1 9cf571c8faa67cad2aa9ff41f3a26e38  cat biddix   fresno 
2 e30f853d4e54604fd62858badb68113a caleb  amos    NA 
3 2ad41134cc285bcc06892fd68a471cd7 daniel folkers    NA 
4 2ad41134cc285bcc06892fd68a471cd7 daniel folkers    NA 
5 63a5e839510a647c1ff3b8aed684c2a5 charles pierce   flint 
6 691df47f2df12f14f000f9a17d1cc40e  j franz prescott+valley 
7 691df47f2df12f14f000f9a17d1cc40e  j franz prescott+valley 
8 b3a1476aa37ae4b799495256324a8d3d carrie mascorro   brea 
9 bd9f1404b313415e7e7b8769376d2705 fred morales  las+vegas 
10 b50a610292803dc302f24ae507ea853a aurora  lee    NA 
11 fb74940e6feb0dc61a1b4d09fcbbcb37 andrew price  yorkville ",sep = "",header = TRUE) 

和那麼你可以使用arrangeplyr,

arrange(dat,sessionid,qf,qn) 

,或者使用基函數,

with(dat,dat[order(sessionid,qf,qn),]) 
3

在您的示例重複行被完全重複。 unique適用於data.frames。

udf <- unique(my.data.frame) 

至於排序......喬蘭剛發佈了答案。

1

它的工作原理,如果你使用重複兩次:

> df 

    a b c d 
1 1 2 A 1001 
2 2 4 B 1002 
3 3 6 B 1002 
4 4 8 C 1003 
5 5 10 D 1004 
6 6 12 D 1004 
7 7 13 E 1005 
8 8 14 E 1006 

> df[!(duplicated(df[c("c","d")]) | duplicated(df[c("c","d")], fromLast = TRUE)), ] 

a b c d 
1 1 2 A 1001 
4 4 8 C 1003 
7 7 13 E 1005 
8 8 14 E 1006