2012-01-21 50 views
2

我試圖學習R,但我被困在看起來很簡單的東西上。我知道SQL,而我用這種語言來交流我的問題的最簡單方法就是使用該語言。有人可以幫助我從SQL到R的翻譯嗎?在R中,如何使用另一個data.frame的一列中的唯一值創建一個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 

出於某種原因,「獨一無二」的功能似乎工作的只有一列,當切換到不同的返回類型,所以它不工作,我期望的那樣。

-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」正是我所期待的。 –

相關問題