0

我正在使用来自海狸的 GPS 数据的数据框,该数据框包括带有动物 id 的列(见$id下文),这是一个具有 26 个级别的因素。对于每只海狸,我们都有几个 GPS 值 - 数字因动物而异。

我现在想以 15 分钟的间隔为每个人创建一个单独的列,其中包含“捕获后的时间”,从 0 分钟开始。对于 15 分钟的间隔,我尝试创建一个序列

TimePostRel <- seq(from = 0, along = x, by = 15)

现在我不确定如何定义 x 所以它指的是每个人。我应该使用 split 函数来拆分数据框吗?我们也有一个日期/时间列,但问题是我们在白天(当动物睡觉时)没有 GPS 点,导致我们想从TimePostRel计算中排除休息时间(我们只想参考“活跃时间”捕获后)。

这是数据框:

'data.frame':   6425 obs. of  22 variables:
 $ nb              : int  1 2 3 4 5 6 7 8 9 10 ...
 $ x               : num  517710 517680 NA 517625 517624 ...
 $ y               : num  6587730 6587759 NA 6587929 6588014 ...
 $ date            : POSIXct, format: "2010-04-10 05:15:00" "2010-04-10 05:30:00" "2010-04-10         05:45:00" "2010-04-10 06:00:00" ...
 $ dx              : num  -30.2 NA NA -0.4 -39.2 ...
 $ dy              : num  28.8 NA NA 85.7 126.8 ...
 $ dist            : num  41.7 NA NA 85.7 132.7 ...
 $ dt              : num  900 900 900 900 900 900 900 900 NA 900 ...
 $ R2n             : num  0 1743 NA 46880 88416 ...
 $ abs.angle       : num  2.38 NA NA 1.58 1.87 ...
 $ rel.angle       : num  NA NA NA NA 0.295 ...
 $ id              : Factor w/ 26 levels "Andreas","Apple",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ burst           : Factor w/ 329 levels "Andreas.1","Andreas.2",..: 1 1 1 1 1 1 1 1 1 2 ...
 $ sex             : int  2 2 NA 2 2 2 NA 2 2 2 ...
 $ season          : int  2 2 NA 2 2 2 NA 2 2 2 ...
 $ try             : int  33 34 NA 36 37 38 NA 39 40 41 ...
 $ x.sats          : int  5 5 NA 5 5 5 NA 6 5 6 ...
 $ hdop            : num  2.1 4.2 NA 2.7 3.3 2.1 NA 2.5 2.8 2.2 ...
 $ lodge.x         : num  517595 517595 NA 517595 517595 ...
 $ lodge.y         : num  6587806 6587806 NA 6587806 6587806 ...
 $ NSD_lodge       : num  19039 9440 NA 15909 44268 ...
 $ nsd_1stGPSpoint : num  0 1743 NA 46880 88416 ...

有人现在如何解决这个问题?提前致谢!!

干杯,帕特里夏

4

2 回答 2

1

您可以在data.table. 我假设您的数据被称为dta

library(data.table)
setDT(dta)   ## change format
dta[, TimePostRel:=seq(from = 0, along = x, by = 15), by=x]
于 2014-10-16T14:14:16.537 回答
0

plyr软件包也可以完成此任务。对于具有一列因子的数据框,请使用以下转换选项ddply

library(plyr)
# create a data frame where column x is a factor
df <- data.frame(x=c(rep("b",6),rep("a",3),rep("c",4)))
# apply sequence to each level within x
df <- ddply(df,"x",transform,t=seq(from=0,by=15,length.out=length(x)))

请注意,新数据框的行被排序以匹配列 x 的因子水平:

print(df)
   x  t
1  a  0
2  a 15
3  a 30
4  a 45
5  a 60
6  a 75
7  b  0
8  b 15
9  b 30
10 c  0
11 c 15
12 c 30
13 c 45
于 2016-07-08T22:00:44.680 回答