使用多个解释变量从长到长重塑数据

时间:2015-08-24 10:13:38

标签: r reshape

我正在尝试使用R转换我的数据框格式。我想要唯一的公司名称,因为它对每个公司都有多个观察结果。我的数据看起来像

company name    Values  Year
    A              1    2010
    A              2    2011
    B              4    2010
    B              6    2012
    C              8    2011

我想要格式

 company name   first_value First_year  second_values second_year
     A              1          2010          2           2011
     B              4          2010          6           2012  
     C              8          2011          NA           NA

我已经尝试过这段代码,但它没有给出我期待的结果

library(plyr)
extract.hashtags <- function(x) {
x <- subset(x,select=c(-Company.Name))
mat <- as.matrix(x)
dim(mat) <- c(1,length(mat))
as.data.frame(mat)
}

df1 = ddply(data, .(Company.Name), extract.hashtags )

1 个答案:

答案 0 :(得分:6)

使用devel version of data.table(v 1.9.5 +)

的类似解决方案
library(data.table) ## v 1.9.5+
dcast(setDT(df)[, indx := 1:.N, by = company_name], 
      company_name ~ indx, value.var = c("Values", "Year"))

# c   ompany_name Values_1 Values_2 Year_1 Year_2
# 1:            A        1        2   2010   2011
# 2:            B        4        6   2010   2012
# 3:            C        8       NA   2011     NA

这个想法是为每个组添加一个计数器,然后根据该计数器从长到大重新整形,同时将两个变量同时指定为解释的变量(目前仅在devel版本中可用)。