【发布时间】:2019-07-18 18:18:44
【问题描述】:
我有一个移动粒子的 df,我每小时跟踪一次。我在 1、11、21、31、41 小时有参考距离,并且轨道都在这些时间之间的某个时间点结束。
所以我想要做的是找到每组/试验在 hour0 和 hour(end) 之间的总距离。这意味着我需要在结束前添加小时参考的累积总和,以及结束后一小时的比例距离。
例如,如果轨道在 34 小时结束,我会知道行驶的长度是(1、11、21、31 小时长度的总和)+ 3/10 长度(41)。
我的代码可以找到 cumsum,但我不知道如何添加额外的小比例位。
set.seed(1)
df1 <- data.frame(matrix(nrow=20,ncol=4))
colnames(df1) <- c("group","trial","hour","length")
df1$group <- rep(c("a","b"),each=10)
df1$trial <- rep(c(1,1,1,1,1,2,2,2,2,2),times=2)
df1$hour <- rep(c(1,11,21,31,41),times=4)
df1$length <- rep(c(10,12,13,17,21),times=4)
df2 <- data.frame(matrix(nrow=4,ncol=3))
colnames(df2) <- c("group","trial","end")
df2$group <- c("a","a","b","b")
df2$trial <- c(1,2,1,2)
df2$end <- runif(4,1,40)
df3 <- df2 %>%
left_join(df1,by=c("group","trial")) %>%
group_by(group,trial) %>%
mutate(cumlength = cumsum(length)) %>%
slice({i1 <- which(hour <= end)
c(i1, tail(i1, 1) + 1)})
这让我得到一个包含我应该需要的所有数据的 df,但我希望能够 summarise() 以找到最后一小时的长度总和 + 比例额外位。
df3 %>% summarise(total = sum(length))
# sum of all lengths, but this overshoots.
感谢您的帮助
【问题讨论】:
标签: r dataframe dplyr cumsum summarization