使用R中的现有数据创建和填充新表

Pau*_*koo 3 r plyr dplyr

使用R,如何使用不同结果列的几个结果表并将它们按行组合,以便捕获所有结果,如果一组结果没有此列,则使用NA或空白.基本上我需要获取我拥有的数据

我有的数据

并把它变成我想要的数据

我想要的数据

请注意,我不关心品牌型号和年份,它们可以叠加在一起.

对于格式不佳的帖子道歉,我仍然在这里找到我的脚.

akr*_*run 5

我们可以使用rbindlistdata.table保持它在后list

library(data.table)
rbindlist(list(df1, df2, df3), use.names = TRUE, fill=TRUE)
Run Code Online (Sandbox Code Playgroud)

或使用bind_rowsdplyr

library(dplyr)
bind_rows(df1, df2, df3)
Run Code Online (Sandbox Code Playgroud)

更新

如果数据在图像中显示的单个文件中,请使用readLines,然后将split其读取list并使用rbindlist

lines1 <- trimws(readLines("temp1.csv"))
i1 <- cumsum(grepl("^Brand", lines1))
i2 <- lines1!=''
lst <- lapply(split(lines1[i2], i1[i2]), 
       function(x) read.csv(text=x, sep=""))
rbindlist(lst, use.names=TRUE, fill = TRUE)
Run Code Online (Sandbox Code Playgroud)

要么

bind_rows(lst)
Run Code Online (Sandbox Code Playgroud)

数据

df1 <- data.frame(Brand = 1, Model ="A", Year = 2010:2014, 
              Dogs = c(0.71, 0.76, 0.40, 0.39, 0.67),
              Cats = c(0.64,0.06,0.18, 0.20, 0.23),
        Rabbits = c(0.56, 0.96, 0.90, 0.38, 0.73),
               stringsAsFactors=FALSE)

df2 <- data.frame(Brand = 1, Model ="B", Year = c(2010, 2011, 2013, 2014), 
              Dogs = c(0.12, 0.43, 0.79, 0.29),
              Ducks = c(0.67, 0.48, 0.80, 0.70),
               stringsAsFactors=FALSE)

df3 <-  data.frame(Brand = 1, Model ="C", Year = 2013:2014, 
              Dogs = c(0.76, 0.98),
              Cats = c(0.90, 0.84),
        Lions = c(0.12, 0.22),
              Wolves = c(0.75, 0.61),
               stringsAsFactors=FALSE)
Run Code Online (Sandbox Code Playgroud)