【发布时间】:2016-09-12 10:53:32
【问题描述】:
我对 R 很陌生,似乎无法弄清楚如何处理看似相对简单的问题。我想对每个“TRIAL_INDEX”的“DURATION”列的行求和,但只有那些“X_POSITION”值增加的第一行。我只想对 X 增加的试验中的第一轮求和。 简化数据框的第一行:
TRIAL_INDEX DURATION X_POSITION
1 1 204 314.5
2 1 172 471.6
3 1 186 570.4
4 1 670 539.5
5 1 186 503.6
6 2 134 306.8
7 2 182 503.3
8 2 806 555.7
9 2 323 490.0
因此,对于 TRIAL_INDEX 1,只应添加 DURATION 的前三个值 (204+172+186),因为这是迄今为止 X 具有最高值的位置(逐行遍历数据帧)。
所需的输出应该类似于:
TRIAL_INDEX DURATION X_POSITION FIRST_PASS_TIME
1 1 204 314.5 562
2 1 172 471.6 562
3 1 186 570.4 562
4 1 670 539.5 562
5 1 186 503.6 562
6 2 134 306.8 1122
7 2 182 503.3 1122
8 2 806 555.7 1122
9 2 323 490.0 1122
我尝试使用 dplyr 生成一个可以与我的原始数据帧合并的新数据帧。 但是,代码不起作用,而且我不确定如何确保它只添加每个试验的第一行,这些行的 X_POSITION 值不断增加。
FirstPassRT = dat %>%
group_by(TRIAL_INDEX) %>%
filter(dplyr::lag(dat$X_POSITION,1) > dat$X_POSITION) %>%
summarise(FIRST_PASS_TIME=sum(DURATION))
非常感谢任何帮助和建议!
【问题讨论】:
-
您的
X_POSITION不是数字,那么R 怎么知道它是否在增加呢?我猜它使用底层整数表示(如果这些因素)并引发警告。例如,请参阅here。 -
谢谢大卫,好点子。我将 X_POSITION 值更改为数字值,这是初学者在读取数据时的小错误。不过,似乎没有得到我想要的输出......