【发布时间】:2016-12-23 15:03:31
【问题描述】:
我正在处理工作申请数据,其中每个先前的工作都是 Excel 文件中的一行。我想转换数据集,以便每个过去的雇主都有列 1,2,3,4 等...
我认为最好用一个例子来解释这个问题。如何从起始数据帧到所需的数据帧?
我尝试了一些融合和铸造,但我遇到了困难,因为我不想为每个唯一的公司名称创建一个列,而是基于唯一公司名称的数量。
id <- c(1000,1000,1002,1007,1007,1007,1007,1009)
employers <-c("Ikea","Subway","DISH","DISH","Ikea","Starbucks","Google","Google")
start_date <- c("2/1/2013","5/1/2000","4/1/2012","3/1/2014","8/15/2011","4/15/2008","2/1/2004","3/15/2010")
start <- data.frame(cbind(id,employers,start_date))
colnames(start) <- c("id","employers","start_date")
start
unique_id <- c(1000,1002,1007,1009)
emp1 <- c("Ikea","DISH","DISH","Google")
emp2 <- c("Subway",NA,"Ikea",NA)
emp3 <- c(NA,NA,"Starbucks",NA)
emp4 <- c(NA, NA,"Google",NA)
emp1_start <- c("2/1/2013","4/1/2012","3/1/2014","3/15/2010")
emp2_start <- c("5/1/2000",NA,"8/15/2011",NA)
emp3_start <- c(NA,NA,"4/15/2008",NA)
emp4_start <- c(NA,NA,"2/1/2004",NA)
desired <- data.frame(cbind(unique_id,emp1,emp2,emp3,emp4,emp1_start,emp2_start,emp3_start,emp4_start))
desired
【问题讨论】:
-
start$time <- with(start, ave(as.character(id),id,FUN=seq_along) ); reshape(start, direction="wide", idvar="id", sep="")来自另一个答案。 -
您忘记重命名列 :-)(开个玩笑……您的 codegolf 轻松击败了我)。
-
感谢@thelatemail 发现重复项并使用我的示例发布答案。按照 reshape 的预期创建 timevar 对我的实际数据非常有效,而且更大更混乱。
标签: r dataframe casting transformation melt