2011-12-07 162 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