如果满足行标准,如何从另一个数据帧中获取值?

时间:2018-05-04 09:12:05

标签: r

我是R的新手并尝试分析实验,但现在遇到困难。我有两个数据帧我想要结合起来。

Dataframe emfix

Dataframe lines

完整的数据集位于:https://www.dropbox.com/sh/kn27vgfinjqvxmd/AABR6IAOJsU3FUr6J2XTPGxka?dl=0

emfix包含来自眼动的数据,每行代表一次固定。 emfix$Fixxemfix$Fixy是眼睛的位置。这是一个阅读实验,不同的emfix$Stimulus包含不同数量的y轴上具有不同边框的线条。这些边框位于lines$minlimitlines$maxlimit

我现在想在emfix的帮助下确定lines中每次录制的行号。 R必须做的是获取emfix$Stimulusemfix$Fixy的信息,并检查它们是否与lines$Stimulus匹配,并且介于lines$minlimitlines$maxlimit之间。然后,它必须返回与lines$LineNumber的新列匹配的该行emfix$LineNumber的值。

提前多多感谢!

祝福, 多米尼克

1 个答案:

答案 0 :(得分:0)

我建议使用类似SQL连接的机制(虽然它可能恰好耗费资源)。 我的亲:

  • 它相对容易调试和测试
  • 如果单个emfix$Fixy点落在多个lines$minlimitlines$maxlimit对之间,则不应该受到影响

我的示例代码:

    emfix <- data.frame(fixy = c(0.5,1.5,2.5,3.5,10), stimulus = c("a","a","a","b","b"))
    lines <- data.frame(lines = c(1,2,3,4,5), maxlimit = c(1.1,2.1,3.1,4.1,5.1), minlimit = c(0,1,2,3,4), stimulus = c("a","a","a","b","b"))    
    mer <- merge(x = lines, y = emfix, by = "stimulus")    
    mer[which(mer$fixy <= mer$maxlimit & mer$fixy >= mer$minlimit),] # prints out complete lines OR    
    mer[which(mer$fixy <= mer$maxlimit & mer$fixy >= mer$minlimit), c("stimulus", "lines", "fixy")]