我的实验包括通过两个不同的测量系统在10次演习(试验)期间测量因变量(距离)。有多个参与者(姓名)。我对每个系统如何测量距离感兴趣。但是,这两个系统每次钻孔的采样率和完成时间不同。
一个data.frame
名为" Criterion"结构如下:
Source: local data frame [5 x 6]
Groups: Name, Trial [1]
Trial Name Sample Measure Time Distance
(fctr) (fctr) (int) (fctr) (dbl) (dbl)
1 D5_Sprint1 RUTH 1 CRITE 0.005 NA
2 D5_Sprint1 RUTH 2 CRITE 0.010 0.003429569
3 D5_Sprint1 RUTH 3 CRITE 0.015 0.003933275
4 D5_Sprint1 RUTH 4 CRITE 0.020 0.004403281
5 D5_Sprint1 RUTH 5 CRITE 0.025 0.004826486
另一个,"实践"如下:
Source: local data frame [5 x 6]
Groups: Name, Trial [1]
Trial Name Sample Measure Distance Time
(chr) (chr) (dbl) (chr) (dbl) (dbl)
1 D1_Sprint1 MARK 1 PRAC NA 0.01
2 D1_Sprint1 MARK 2 PRAC 0.0012041589 0.02
3 D1_Sprint1 MARK 3 PRAC NA 0.03
4 D1_Sprint1 MARK 4 PRAC 0.0009219522 0.04
5 D1_Sprint1 MARK 5 PRAC 0.0012165535 0.05
我可以使用下面的代码找到每个试验的结束时间,每个名称和相关的行号:
PracticalDrillTimes <- Practical %>%
mutate(Row = seq_along(Time)) %>%
group_by(Name, Trial) %>% slice(n())
Source: local data frame [5 x 7]
Groups: Name, Trial [5]
Trial Name Sample Measure Distance Time Row
(chr) (chr) (dbl) (chr) (dbl) (dbl) (int)
1 D1_Sprint1 RUTH 656 PRAC 0.015959010 6.56 656
2 D1_Sprint1 MARK 576 PRAC 0.014603082 5.76 576
3 D1_Sprint2 RUTH 651 PRAC 0.005423099 6.51 651
4 D1_Sprint2 MARK 746 PRAC 0.021403738 7.46 746
5 D1_Sprint5 RUTH 621 PRAC 0.032652871 6.21 621
我对Criterion数据集重复上述内容。
Source: local data frame [5 x 7]
Groups: Name, Trial [5]
Trial Name Sample Measure Time Distance Row
(fctr) (fctr) (int) (fctr) (dbl) (dbl) (int)
1 D1_Sprint1 RUTH 1041 CRITE 5.205 0.0002099668 1041
2 D1_Sprint1 MARK 944 CRITE 4.720 0.0002195038 944
3 D1_Sprint2 RUTH 985 CRITE 4.925 0.0002437823 985
4 D1_Sprint2 MARK 977 CRITE 4.885 0.0002515801 977
5 D1_Sprint3 RUTH 1149 CRITE 5.745 0.0002597051 1149
我现在希望修剪实用data.frame
,以使较短的钻头长度与标准的钻头长度匹配,以便两个钻头具有相同的长度。例如,在实践中修剪Ruth的6.56秒长度钻头以匹配5.205长度。
我有时间结束每次练习,但是如何有效地匹配和修剪实用data.frame
与适当的练习长度?
我知道我可以使用子集或删除特定行,但data.frame
都是&gt; 100,000行的长度,因此快速解决方案将是理想的。谢谢!
答案 0 :(得分:1)
如果我理解正确,您希望通过删除每个名称x试验的Time(Time_Practical,为清晰度)大于max(Time_Criterion)的行来修剪Practical。不是处理行号,一种方法是总结每个Name x Trial组合的max(Time),然后按如下方式加入和过滤:
CriterionDrillTimes <- Criterion %>%
group_by(Name, Trial) %>%
summarize(MaxTimeCriterion = max(Time))
PracticalJoin <- Practical %>%
left_join(CriterionDrillTimes, by = c('Name', 'Trial')) %>%
filter(Time <= MaxTimeCriterion)