Manipulating Data - 融合数据框

作者: 王诗翔 | 来源:发表于2018-01-03 10:53 被阅读28次

    问题

    你想要基于一个给定的列融合两个数据框(像SQL的join)。

    方案

    # 创建一个将storyid映射到titles上的数据框
    stories <- read.table(header=TRUE, text='
       storyid  title
        1       lions
        2      tigers
        3       bears
    ')
    
    # 创建另一个有数据和storyid的数据框(没有titles)
    data <- read.table(header=TRUE, text='
        subject storyid rating
              1       1    6.7
              1       2    4.5
              1       3    3.7
              2       2    3.3
              2       3    4.1
              2       1    5.2
    ')
    
    # 融合两个数据框
    merge(stories, data, "storyid")
    #>   storyid  title subject rating
    #> 1       1  lions       1    6.7
    #> 2       1  lions       2    5.2
    #> 3       2 tigers       1    4.5
    #> 4       2 tigers       2    3.3
    #> 5       3  bears       1    3.7
    #> 6       3  bears       2    4.1
    
    

    如果两个数据框里你想要匹配的列有不同的名字,可以通过选项指定:

    # 下面使用的是`id`替换了storyid
    stories2 <- read.table(header=TRUE, text='
       id       title
        1       lions
        2      tigers
        3       bears
    ')
    
    # 融合两个数据框
    merge(x=stories2, y=data, by.x="id", by.y="storyid")
    #>   id  title subject rating
    #> 1  1  lions       1    6.7
    #> 2  1  lions       2    5.2
    #> 3  2 tigers       1    4.5
    #> 4  2 tigers       2    3.3
    #> 5  3  bears       1    3.7
    #> 6  3  bears       2    4.1
    
    # 注意结果的列名继承第一个数据框 
    
    

    我们也可以融合多个列:

    # 制造更多的数据
    animals <- read.table(header=T, text='
       size type         name
      small  cat         lynx
        big  cat        tiger
      small  dog    chihuahua
        big  dog "great dane"
    ')
    
    observations <- read.table(header=T, text='
       number  size type
            1   big  cat
            2 small  dog
            3 small  dog
            4   big  dog
    ')
    
    merge(observations, animals, c("size","type"))
    #>    size type number       name
    #> 1   big  cat      1      tiger
    #> 2   big  dog      4 great dane
    #> 3 small  dog      2  chihuahua
    #> 4 small  dog      3  chihuahua
    
    

    注意

    融合之后,改变列名的顺序可能是 有用的,参见../Reordering the columns in a data frame

    相关文章

      网友评论

      • 小影_8816:老师,有问题向你请教,请问你邮箱方便留一下吗?谢谢!
        王诗翔:@小影_8816 我不是老师哈,直接问就行。你可以在https://shixiangwang.freeflarum.com/发个贴
      • 小影_8816:老师,你好,请问SNP连锁不平衡图的可视化R包LDheatmap使用中,分析结果出现column 1 is not a genotype object,请问如何解决?谢谢!
        王诗翔:@小影_8816 说明你输入的数据有点问题。

      本文标题:Manipulating Data - 融合数据框

      本文链接:https://www.haomeiwen.com/subject/anqhnxtx.html