按多个标准合并并将重复分割成单独的列?

我很确定这个问题已经被提出并在某些时候回答了,但是我是一个新手,真的缺乏有效地find问题和解决scheme的词汇。 我有一个简单的任务,因为内部内存限制,我无法在Excel中执行任务,但是我对SQL或R知之甚less,不知道如何在这两个平台中执行此任务。

我有两张桌子,一张有唯一ID号的唯一条目,另一张有这些ID号的多个副本,每个副本都显示不同的数字(代表职业生涯中的每个新的薪水)。 我试图将每个工资映射到原始的唯一ID表,为每个可能的变化创build新的列(Salary1:Salary50)。 最终,我还需要绘制每个更改的date和差异以进行分析。 这是一个例子:

这是唯一的ID表:

Table 1 ID Salary1 Salary2 Salary3 Salary4 Salary5 1 ? ? ? ? ? 2 ? ? ? ? ? 3 ? ? ? ? ? 4 ? ? ? ? ? 5 ? ? ? ? ? 

这是带有重复ID和我想要的信息的工资表:

 Table2 ID Salary SalaryDate 1 10 1/1/2014 1 11 1/1/2015 1 12 1/1/2016 2 12 1/1/2015 2 13 1/1/2016 3 10 1/1/2016 4 10 1/1/2014 4 12 1/1/2015 4 14 1/1/2016 5 10 1/1/2016 

最后的状态应该是这样的:

 Table3 ID Salary1 Salary2 Salary3 Salary4 Salary5 1 10 11 12 0 0 2 12 13 0 0 0 3 10 0 0 0 0 4 10 12 0 0 0 5 10 0 0 0 0 

我build立了一个多标准的Vlookup来把所有东西都拉到正确的列中,但是数据集有超过10万行来检查,所以无法完成记忆。 任何人都可以build议我如何可以在Access,R,SPSS做同样的事情,或者如果有一些有效的Excel-VBA代码我可以使用?

谢谢你的帮助!

我不知道“Vlookup”是什么,但显然你正在寻找这样的东西:

 DF <- read.table(text = "ID Salary SalaryDate 1 10 1/1/2014 1 11 1/1/2015 1 12 1/1/2016 2 12 1/1/2015 2 13 1/1/2016 3 10 1/1/2016 4 10 1/1/2014 4 12 1/1/2015 4 14 1/1/2016 5 10 1/1/2016", header = TRUE) #years of employment assuming the table is sorted by dates DF$y <- ave(DF$ID, DF$ID, FUN = seq_along) #reshape library(reshape2) dcast(DF, ID ~ y, value.var = "Salary", fill = 0) # ID 1 2 3 #1 1 10 11 12 #2 2 12 13 0 #3 3 10 0 0 #4 4 10 12 14 #5 5 10 0 0 

请注意,这在R中不是非常有用的数据格式。您的原始数据格式对于进一步的分析似乎更有用。

假设Table1中的ID是Table2中ID的一个子集,我们只需要那些。 此外,我们还希望Salary1结果列中的任何ID的第一个Salary, Salary1结果列中的第二个Salary2等等。 首先计算Seq,在任何ID的第一个date是1,第二个是2,依此类推。 然后从Table1中的Salary列中标出其级别的序号创build一个因子。 在Table1的最后一个语句子集Table2 ,对于Table1ID值(在数据显示的情况下它们是相同的,所以它没有任何作用),并使用xtabs从long到wide的forms重新xtabs 。 没有包被使用。

  Seq <- ave(1:nrow(Table2), Table2$ID, FUN = seq_along) Table0 <- Table1[-1] # Table0 is Table1 without ID column Table2$SalaryNo <- factor(Seq, levels = 1:ncol(Table0), labels = colnames(Table0)) xtabs(Salary ~ ID + SalaryNo, data = subset(Table2, ID %in% Table1$ID)) 

赠送:

  Salary_No ID Salary1 Salary2 Salary3 Salary4 Salary5 1 10 11 12 0 0 2 12 13 0 0 0 3 10 0 0 0 0 4 10 12 14 0 0 5 10 0 0 0 0 

注意:表格不是以可重现的forms提供的,解决scheme可能具体取决于它们是什么,所以我们假设:

 Lines1 <- " ID Salary1 Salary2 Salary3 Salary4 Salary5 1 ? ? ? ? ? 2 ? ? ? ? ? 3 ? ? ? ? ? 4 ? ? ? ? ? 5 ? ? ? ? ?" Table1 <- read.table(text = Lines1, header = TRUE) Lines2 <- " ID Salary SalaryDate 1 10 1/1/2014 1 11 1/1/2015 1 12 1/1/2016 2 12 1/1/2015 2 13 1/1/2016 3 10 1/1/2016 4 10 1/1/2014 4 12 1/1/2015 4 14 1/1/2016 5 10 1/1/2016" Table2 <- read.table(text = Lines2, header = TRUE) 

更新:相应地更改了假设和代码。 还修复了一个错误(不影响显示的数据,但可能会影响其他数据)。