我有两组数据,它们对应于我想要合并进行分析的不同实验任务。问题是我需要搜索和匹配特定行的特定行和特定参与者。我想用脚本来省去一些麻烦。这可能很简单,但我以前从未这样做过。
这里更具体地说明了我的问题: 在第一个数据集中,每行对应一个两个替代的强制选择任务,其中一次呈现两个刺激并且参与者选择一个。在第二个数据集中,每行对应于单个项目任务,其中询问参与者他们之前是否曾见过刺激。第二个任务中的刺激与第一个任务中的对中的刺激相匹配(两倍的行)。我希望能够匹配并向第一个数据集添加两列 - 一个用于说明LEftide项目是否稍后被识别,另一个用于右侧刺激。
我认为这可以通过嵌套循环完成,但我不确定是否有一种优雅的方式来执行此操作或者可能是一个包。
答案 0 :(得分:0)
据我了解,您的第一个数据集看起来像这样:
(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
这提供了有关每个人如何对每项刺激做出回应的信息。
您可以通过将人/刺激对与match
函数匹配来合并这两者:
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
另一个选项(从原始dat1
和dat2
开始)将与merge
函数合并两次。您对输出列的名称控制较少,但它需要少一点输入:
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"))