2017-01-24 2 views
1

私はこれが尋ねられ、ある時点で回答されていると確信していますが、私は初心者であり、質問と解決策を効果的に見つけるための語彙が本当に欠けています。私は内部メモリの制限のためにExcelで実行できない単純なタスクを持っていますが、どちらのプラットフォームでもそれを実行する方法を理解するにはSQLやRについて十分に知りません。複数の条件でマージし、重複を別々の列に分割しますか?

私は2つのテーブルを持っています.1つは固有のID番号を持つユニークなエントリを持ち、もう1つはID番号の複数の複製を持ち、それぞれ異なる番号を示しています。各給与を元の一意のIDテーブルにマップし、可能なすべての変更(Salary1:Salary50)の新しい列を作成しようとしています。最終的には、分析のための各変更の日付と相違点についてもマッピングする必要があります。ここでは例です:

これはユニークな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 

私は複数の基準Vlookupを構築してすべてを右の列にプルしますデータセットは100,000を超える行がチェックされているため、メモリごとに完了することはできません。 Access、R、SPSSで同じことをやっているか、Excel-VBAコードがあれば教えてください。

ありがとうございました!

答えて

1

私は「VLOOKUP」は何であるか見当がつかないが、どうやらあなたはこのような何かを探しています:これはあなたの元のデータ形式は思わR.で非常に有用なデータ形式ではないことを

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 

注意さらなる分析にはるかに有用です。

1

Table1のIDはTable2のIDのサブセットであり、それらのIDだけを必要とするものとします。また、Salary1結果の列にあるIDの最初の給与、Salary2の結果の列の2番目の給与などが必要です。最初に、任意のIDの最初の日付のための1であるSeqを計算し、秒のために2を計算します。次に、レベルがTable1のSalary列によってラベル付けされているシーケンス番号の中から因子を作成します。最後のステートメントのサブセットTable2からIDの値が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 

注:のテーブルが再現可能な形で提供されていなかったし、解決策は、彼らがそのように私たちは、この想定しているされ、具体的内容に依存してもよい:

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) 

更新:対応する前提とコードを変更しました。また、表示されたデータには影響しなかったが、他のデータに影響を与える可能性のあるエラーも修正されました。

+0

model.frame.defaultのエラー(数式=給与〜Global.ID +給与番号: 可変長が異なる(「SalaryNo」に見つかりました) – TwoHeartedKale

+0

修正済みノート内のデータが使用された場合、バグは答えに影響しませんでした。) –

関連する問題