我很确定这个问题已在某个时候被提出并得到解答,但我是一个新手,并且缺乏有效找到问题和解决方案的词汇。我有一个简单的任务,由于内部内存限制,我无法在Excel中执行,但我对SQL或R的了解不足以弄清楚如何在这两个平台中执行此操作。
我有两个表,一个有唯一ID号的唯一条目,另一个有这些ID号的多个副本,每个表示不同的数字(代表职业过程中的每个新工资)。我试图将每个工资映射到原始唯一ID表,为每个可能的更改创建新列(Salary1:Salary50)。最后,我还需要映射每个变化的日期和差异以进行分析。这是一个例子:
这是唯一的ID表:
<hot-table id="demoTable"
colHeaders="true"
datarows="gridData"
settings="gridPreferences"
height="300">
<!-- BasicData -->
<hot-column data="row_id" title="'ID'" type="'text'"></hot-column>
这里是薪资表,其中包含重复的ID和我想要的信息:
Table 1
ID Salary1 Salary2 Salary3 Salary4 Salary5
1 ? ? ? ? ?
2 ? ? ? ? ?
3 ? ? ? ? ?
4 ? ? ? ? ?
5 ? ? ? ? ?
最终状态应如下所示:
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
我构建了一个多标准Vlookup来将所有内容拉到正确的列中,但数据集有超过100,000行要检查,以便它无法完成内存。任何人都可以建议我如何在Access,R,SPSS中做同样的事情,或者我是否可以使用一些有效的Excel-VBA代码?
感谢您的帮助!
答案 0 :(得分:1)
我不知道“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中非常有用的数据格式。您的原始数据格式对于进一步分析似乎更有用。
答案 1 :(得分:1)
假设Table1中的ID是Table2中ID的子集,我们只想要那些。此外,我们希望Salary1
结果列中任何ID的第一个薪水,Salary2
结果列中的第二个薪水等等。首先计算Seq,其中任何ID
中的第一个日期为1,第二个日期为2,依此类推。然后从那些级别由表1中的Salary列标记的序列号中创建一个因子。在最后一个语句子集Table2
到ID
的{{1}}值(在数据显示的情况下它们是相同的,因此它没有任何效果)并从长到宽重新整形使用Table1
表单。没有包使用。
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
更新:相应地更改了假设和代码。还修复了错误(不影响显示的数据但可能影响其他数据)。