试试data.table foverlaps
library(data.table)
library(magrittr)
gt <- fread('gyro start
6.9 0
4.7 50.69
1.5 55.77
-2.3 63.44
-4.3 90
NA 100.11
NA 124.1
-1.3 150.22
1.5 160') %>%
.[,end:=start+0.01]
#because you only permit gt$start < ft$end (Not <=), so I add 0.01
ft <- fread('start end fixation_x fixation_y
50.69 100.11 1020 590
124.1 160 1123 690
200 275 1700 300
500 551.25 850 475
700 890.2 697 785') %>%
setkey(start,end)
gx <- gt[,fid:=foverlaps(gt, ft, type="within", which=TRUE)$yid] %>%
.[-which(is.na(fid)), mean(gyro,na.rm=T), by=.(fid)]
ft[,fid:=.I] %>% setkey(fid) %>% .[gx, fixation_x*V1]
※ 引述《bedroom0204 (khkh)》之铭言:
: [问题类型]:
:
: 程式谘询(我想用R 做某件事情,但是我不知道要怎麽用R 写出来)
:
: [软体熟悉度]:
: 新手(没写过程式,R 是我的第一次)
: [问题叙述]:
: 我有两个的资料档,
: 一个是Fixation的资料档,一个是gyro的资料档。
: Fixation的资料档结构如下:
: start end fixation.x fixation.y fixation.x_gyro
: 1 50.69 100.11 1020 590
: 2 124.1 160 1123 690
: 3 200 275 1700 300
: 4 500 551.25 850 475
: 5 700 890.2 697 785
: gyro的资料如下:
: gyro start
: 1 6.9 0
: 2 4.7 50.69
: 3 1.5 55.77
: 4 -2.3 63.44
: 5 -4.3 90
: 6 100.11
: 7 124.1
: 8 -1.3 150.22
: 9 1.5 160
: 由於Fixation的资料是从gyro资料分析的,所以start值必定会有相同。
: 我想要求每个fixation经过几个gyro值,并将该fixation.x乘上经过的gyro平均值。
: 例如:
: (起点终点不一定会有gyro值,所以计算在这时间区间内的gyro值)
: 第1个fixation有第2.3.4.5个gyro值;
: 第2个fixation有经过第8.9个gyro值。
: 实在是程式新手,麻烦各位给予一些指导,谢谢。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 36.225.168.242
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/R_Language/M.1476228440.A.4B2.html
※ 编辑: cywhale (36.225.168.242), 10/12/2016 07:29:15
1F:推 celestialgod: 学到一个好用的函数,感谢 10/12 18:41