【问题标题】:creating new data columns with mutate使用 mutate 创建新的数据列
【发布时间】:2017-08-04 23:57:53
【问题描述】:

使用以下数据:

data <- data.frame(Name=c("11C","11C","12C","12C","20D","20D"),
               PID=c("AD15E","AD15E","AA05D","AA05D","Z48J","Z48J"),
               Type=c("Home","Auto","Home","Auto","Home","Auto"),
               Brand=c("A","B","C","H","I","D"),
               Model=c("A152","K235","W54","H2","A57","Y0878"))

使用 mutate,我想在第一个唯一 PID 显示的行上的数据框中创建四个新列(HomeBrand、HomeModel、AutoBrand、AutoModel)。

结果应如下所示:

result <- data.frame(Name=c("11C","12C","20D"),
               PID=c("AD15E","AA05D","Z48J"),
               Type=c("Home","Home","Home"),
               HomeBrand=c("A","C","I"),
               HomeModel=c("A152","W54","A57"),
               AutoBrand=c("B","H","D"),
               AutoModel=c("K235","H2","Y0878"))

我尝试过使用 mutate 但似乎无法弄清楚

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    在结果中包含 HomeType 列没有意义,因为 Type 列转到标题,并且对于每一行,您混合了 HomeAuto 值;没有那个专栏,reshape 的任务很简单:

    reshape(data, idvar = c("Name", "PID"), timevar = "Type", direction = "wide") 
    
    #  Name   PID Brand.Home Model.Home Brand.Auto Model.Auto
    #1  11C AD15E          A       A152          B       K235
    #3  12C AA05D          C        W54          H         H2
    #5  20D  Z48J          I        A57          D      Y0878
    

    为了比较,这是你的结果:

    result
    #  Name   PID Type HomeBrand HomeModel AutoBrand AutoModel
    #1  11C AD15E Home         A      A152         B      K235
    #2  12C AA05D Home         C       W54         H        H2
    #3  20D  Z48J Home         I       A57         D     Y0878
    

    【讨论】:

      【解决方案2】:

      我们可以通过dcast 做到这一点

      library(data.table)
      dcast(setDT(data), Name + PID  ~ Type, value.var = c("Brand", "Model"), sep="")
      #   Name   PID BrandAuto BrandHome ModelAuto ModelHome
      #1:  11C AD15E         B         A      K235      A152
      #2:  12C AA05D         H         C        H2       W54
      #3:  20D  Z48J         D         I     Y0878       A57
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-06
        • 1970-01-01
        • 1970-01-01
        • 2017-08-12
        相关资源
        最近更新 更多