我需要在数据框的新列中计算以下等式。
相对位移指数: | {(净排量l-净排量l + 1)/净排量1} * 100 |, 我需要计算GPS位置l和位置l + 1之间净位移的绝对值。结果数字将是一个百分比值。
我遇到的问题是我无法想出一个简单的方法来插入上面的公式,我计算从第1行到第2行,第2行到第3行,第3行到第4行的净位移幅度的相对变化我已经包含了一个示例数据框供您参考。我还在数据框中包含了一个包含所需输出的列。数据采用分层结构(GPS位置嵌套在COLLAR_ID,DATETIME,MONTH,DAY,YEAR和HOUR中。
dput(droplevels(head(example, 4)))
structure(list(COLLAR_ID = c(33827L, 33827L, 33827L, 33827L),
DATETIME = structure(1:4, .Label = c("10/1/2013 10:00", "10/1/2013 10:30",
"10/1/2013 17:00", "10/1/2013 17:30"), class = "factor"),
WEEK = c(1L, 1L, 1L, 1L), YEAR = c(2013L, 2013L, 2013L, 2013L
), MONTH = c(10L, 10L, 10L, 10L), DAY = c(1L, 1L, 1L, 1L),
HOUR = c(10L, 10L, 17L, 17L), X = c(384349L, 431753L, 242501L,
448158L), Y = c(8864608L, 8757741L, 7306632L, 1159880L),
MOVEMENT_DISTANCE = c(78.1, 99.82, 35.9, 3), NET_DISPLACEMENT = c(135.35,
205.65, 403.79, 434.83)), .Names = c("COLLAR_ID", "DATETIME","WEEK", "YEAR","MONTH","DAY", "HOUR", "X", "Y", "MOVEMENT_DISTANCE","NET_DISPLACEMENT"), row.names = c(NA, 4L), class = "data.frame")
答案 0 :(得分:1)
我们可以使用dplyr包中的lead
函数。假设您的数据框名为dat
。 dat2
是最终输出。
library(dplyr)
dat2 <- dat %>%
mutate(RDI = abs((NET_DISPLACEMENT - lead(NET_DISPLACEMENT))/NET_DISPLACEMENT * 100))
head(dat2$RDI)
# [1] 51.9394163 96.3481644 7.6871641 0.5128441 1.2020342 0.3243490
您也可以按如下方式使用基数R.
dat3 <- dat
dat3$RDI <- with(dat, abs((NET_DISPLACEMENT - c(NET_DISPLACEMENT[-1], NA))/NET_DISPLACEMENT * 100))
head(dat3$RDI)
# [1] 51.9394163 96.3481644 7.6871641 0.5128441 1.2020342 0.3243490