R匹配列名和拉取值

时间:2016-05-03 18:10:45

标签: r loops merge match

我正在尝试查找与参与者实验相关的值,并为每个参与者参与每个实验加以总结。

如果参与者在A栏中有一个1,则表示他们接触了实验A.然后我想提取与实验A相关的3个值,并开始在每个参与者的每个实验曝光中对这些值求和。 / p>

DF:

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

我的查询数据框:

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

对于df的结果:

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

我的真实数据集有64个实验实例,有7,000个参与者。我的简写是:

对于每一行, 对于每一列,

如果列i = 1,请匹配columnName以查找$ Experiment

在临时数组中添加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")

1 个答案:

答案 0 :(得分:4)

您正在描述矩阵乘法。将ParticipantExperiment列视为行标签(以及要求 df的实验列与查找表的行的顺序相同) :

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