2012-01-21 2 views
2

私はRを学ぼうとしていますが、私は単純なように見えます。私はSQLを知っています。私の質問を伝える最も簡単な方法は、その言語です。誰かがSQLからRへの翻訳を手助けできますか?Rでは、別のdata.frameの1列からユニークな値を持つdata.frameを作成するにはどうすればいいですか?

私はこのことを考え出した:

SELECT col1, sum(col2) FROM table1 GROUP BY col1 

はこのに変換:

aggregate(x=table1$col2, by=list(table1$col1), FUN=sum) 

そして、私はこのことを考え出した:

SELECT col1, col2 FROM table1 GROUP BY col1, col2 

はこのに変換します。

unique(table1[,c("col1","col2")]) 

しかし、これはどう翻訳されていますか?何らかの理由で

SELECT col1 FROM table1 GROUP BY col1 

、「ユニーク」機能は、1つの列のみで作業するとき異なる戻り値の型に切り替えているようですので、私が期待するとして、それは動作しません。

-TC

答えて

2

私はあなたがベクター上uniqueを呼び出すと、ベクトルではなく、データフレームを返すという事実に言及していることを推測しています。ここでは役立つかもしれない例のカップルです:

#Some example data 
dat <- data.frame(x = rep(letters[1:2],times = 5), 
        y = rep(letters[3:4],each = 5)) 
> dat 
    x y 
1 a c 
2 b c 
3 a c 
4 b c 
5 a c 
6 b d 
7 a d 
8 b d 
9 a d 
10 b d 
> unique(dat) 
    x y 
1 a c 
2 b c 
6 b d 
7 a d 
#Unique => vector 
> unique(dat$x) 
[1] "a" "b" 
#Same thing 
> unique(dat[,'x']) 
[1] "a" "b" 
#drop = FALSE preserves the data frame structure 
> unique(dat[,'x',drop = FALSE]) 
    x 
1 a 
2 b 
#Or you can just convert it back (although the default column name is ugly) 
> data.frame(unique(dat$x)) 
    unique.dat.x. 
1    a 
2    b 
+0

ありがとうございます。 "drop = FALSE"はまさに私が探していたものです。 –

1

あなたがSQLを知っている場合は、パッケージsqldfdata.tableを試してみてください。

関連する問題