2016-05-03 3 views
1

を引きます。Rの一致列の名前と私は参加者の実験に関連する値を検索し、各実験における各参加者の参加のためにそれらを合計しようとしていた値

参加者の列Aが1の場合は、実験Aに公開されていることを意味します。次に、実験Aに関連付けられた3つの値を引き込み、各参加者の各実験の露出でそれらの値を合計します。

DF:

Participant A B 
1  1 1 
2  1 0 
3  0 1 

マイルックアップデータフレーム:DFの結果については

Experiment Val1 Val2 Val3 
A  1.1 1.2 1.3 
B  1.0 1.1 1.5 

Id A B Val1 Val2 Val3 
1  1 1 2.1 2.3 2.8 
2  1 0 1.1 1.2 1.3 
3  0 1 1.0 1.1 1.5 

私の本当のデータセットが7,000参加者と実験の64個のインスタンスを持っています。これがどのように見えるかの私の速記は次のようになります。行ごとに

、列ごと 、

列I = 1、試合COLUMNNAMEは$実験を検索する場合は

はVAL1追加:中のVal3を一時配列

その後、任意の助けをいただければ幸いDF

に一時配列を貼り付け!私は、これが一致するかの機能をマージするかはわかりません。

データ

df = structure(list(Participant = 1:3, A = c(1L, 1L, 0L), B = c(1L, 
0L, 1L)), .Names = c("Participant", "A", "B"), row.names = c(NA, 
-3L), class = "data.frame") 
lookup = structure(list(Experiment = c("A", "B"), Val1 = c(1.1, 1), Val2 = c(1.2, 
1.1), Val3 = c(1.3, 1.5)), .Names = c("Experiment", "Val1", "Val2", 
"Val3"), row.names = c(NA, -2L), class = "data.frame") 

答えて

4

あなたは行列の乗算を記述しています。

result = as.matrix(df[, -1]) %*% as.matrix(lookup[, -1]) 
result = cbind(df[1], result) 
result 
# Participant Val1 Val2 Val3 
# 1   1 2.1 2.3 2.8 
# 2   2 1.1 1.2 1.3 
# 3   3 1.0 1.1 1.5 
+2

セカンドラインはCBIND(DF [1 'とすることができる:(dfの実験列がルックアップテーブルの列と同じ順序であることを必要とParticipantExperiment行ラベルとしてカラムを治療]、その結果) ' – Frank