如何在R中合并两个不等大小的数据帧

时间:2014-04-04 10:02:48

标签: r merge

我有两个数据帧:

>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)

我想从列表中删除这些元素,或者在合并时有任何方式我的级别数等于temp df的级别。

2 个答案:

答案 0 :(得分:2)

您可以在droplevels周围包裹merge以删除未使用的级别:

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

答案 1 :(得分:1)

您可以按

删除空白关卡
m1$Var1 <- factor(m1$Var1)