R 使用mutate创建新数据列

R 使用mutate创建新数据列,r,dplyr,mutate,R,Dplyr,Mutate,使用以下数据: 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","

使用以下数据:

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

data在结果中使用类型列Home是没有意义的,因为类型列指向标题,并且对于每一行,您都混合了Home和Auto值;没有该列,只需执行
重塑
的简单任务:

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

在结果中使用Home类型列没有意义,因为该类型列指向标题,并且对于每一行,您混合使用Home和Auto值;没有该列,只需执行
重塑
的简单任务:

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

我们可以使用
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

我们可以使用
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