2014-04-04 50 views
1

合併兩個大小不等的數據幀我有兩個dataframes:如何R中

>temp 

     Var1    Freq1 
1 file-upload    1 
2 image-processing  1 
3  mime-types   1 
4  php     5 


>top 

     Var2    Freq2 
1 file-upload    1 
2 image-processing  1 
3  mime-types   1 
4  php     5 
5  upload    1 
6  firefox    2 
7 machine-learning  1 
8  matlab    1 
9  r     2 
10  c#     7 

現在我做:

m1 <- merge(temp, top, by.x = "Var1", by.y = "Var2", all.x = TRUE) 

他們m1將是:

 Var1    Freq1  Freq2 
1 file-upload    1   1 
2 image-processing  1   1 
3  mime-types   1   1 
4  php     5   5 

m1$Var1的級別數顯示10而不是4,並且當我嘗試分割m1時上的Var1

x <- split(m1, m1$Var1) 

長度(X)的值是10不爲4和6層的元件示出這種值

$c# 
[1] Var1 Freq1 Freq2 
<0 rows> (or 0-length row.names) 

欲從列表中刪除這些元素或者是有的任何方式,當我合併我有等級的數量等於溫度DF。

回答

1

您可以通過

m1$Var1 <- factor(m1$Var1) 
+0

感謝它的工作...但有什麼辦法,t可我們正在合併時丟棄? – tanay

+0

我不這麼認爲 - 除非你在temp和top中設置,Var1是一個字符向量而不是一個因子 –

2

刪除空的水平你可以用droplevelsmerge周圍刪除未使用的水平:

x <- data.frame(var=letters[1:3],freq1=1:3) 
y <- data.frame(var=letters[2:4],freq2=2:4) 

merge(x,y)$var 
[1] b c 
Levels: a b c 

droplevels(merge(x,y))$var 
[1] b c 
Levels: b c