结合数据使用R(或者也许Excel) – 循环匹配刺激

我有两组数据,分别对应于我想要合并分析的不同实验任务。 问题是我需要search和匹配特定的刺激和特定参与者的某些行。 我想用一个脚本来节省一些麻烦。 这可能很简单,但我从来没有做过。

这是我的问题更具体:在第一个数据集中,每行对应于两个替代强迫select任务,其中两个刺激一次呈现,参与者select一个。 在第二个数据集中,每行对应于单个项目任务,其中参与者被询问他们是否曾经见过刺激。 第二个任务中的刺激与第一个任务中对的刺激相匹配(两倍多)。 我希望能够匹配并在第一个数据集中添加两列 – 一个表示左侧项目是否稍后被识别,另一个是右侧刺激。

我认为这可以用嵌套循环完成,但我不知道是否有一个优雅的方式来做到这一点,也许是一个包。

据我所知,你的第一个数据集看起来像这样:

(dat1 <- data.frame(person=1:2, stim1=1:2, stim2=3:4)) # person stim1 stim2 # 1 1 1 3 # 2 2 2 4 

这意味着人1得到刺激1和3,人2得到刺激2和4.然后你的第二个数据集看起来像这样:

 (dat2 <- data.frame(person=c(1, 1, 2, 2), stim=c(1, 3, 4, 2), responded=c(0, 1, 0, 1))) # person stim responded # 1 1 1 0 # 2 1 3 1 # 3 2 4 0 # 4 2 2 1 

这给出了每个人如何回应每个刺激的信息。

您可以通过匹配人/刺激对与matchfunction来合并这两个:

 dat1$response1 <- dat2$responded[match(paste(dat1$person, dat1$stim1), paste(dat2$person, dat2$stim))] dat1$response2 <- dat2$responded[match(paste(dat1$person, dat1$stim2), paste(dat2$person, dat2$stim))] dat1 # person stim1 stim2 response1 response2 # 1 1 1 3 0 1 # 2 2 2 4 1 0 

另一个选项(从原始的dat1dat2 )将两次与mergefunctionmerge 。 对输出列的名称有一点控制,但是需要less一些input:

 merged <- merge(dat1, dat2, by.x=c("person", "stim1"), by.y=c("person", "stim")) merged <- merge(merged, dat2, by.x=c("person", "stim2"), by.y=c("person", "stim"))