5

次のデータからsessionid、qf、qnの重複する組み合わせを削除したい

               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として読み込み、mydataと呼びます。これが私がこれまでに持っているコードですが、最初にdata.frameを正しくソートする方法を知る必要があります。次に、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)
}

ありがとう!

4

4 に答える 4

18

duplicated()sのメソッドが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
于 2011-12-07T21:07:11.497 に答える
3

あなたの例では、繰り返される行は完全に繰り返されました。 uniquedata.framesで動作します。

udf <- unique( my.data.frame )

ソートに関しては...joranが答えを投稿しました。

于 2011-12-07T21:18:56.353 に答える
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)

そして、あなたはplyrarrangeから使うことができます、

arrange(dat,sessionid,qf,qn)

または基本関数を使用して、

with(dat,dat[order(sessionid,qf,qn),])
于 2011-12-07T21:14:34.520 に答える
1

複製を2回使用すると機能します。

> 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
于 2016-06-22T14:13:43.333 に答える