我正在研究我的硕士论文,并需要一些R编码的帮助。我正在分析野生火鸡在繁殖的不同阶段的运动。我需要找到个人在某个区域内的最后日期和第一个日期的差异。
x<- data.frame(
AreaID = c(1,1,1,1,2,2,2,2),
Timestamp=as.POSIXct(c("06/01/2014 05:01", "6/01/2014 13:00","06/01/2014 23:00", "06/02/2014 10:00","06/20/2015 09:00",
"06/20/2015 10:00", "06/20/2015 11:00", "06/20/2015 12:00"), format='%m/%d/%Y %H:%M'))
我需要一个具有AreaID的新数据框以及在该区域内花费的时间。
感谢您的帮助。
答案 0 :(得分:1)
library(dplyr)
group_by(x, AreaID) %>%
summarize(duration = max(Timestamp) - min(Timestamp))
# # A tibble: 2 x 2
# AreaID duration
# <dbl> <time>
# 1 1 1.207639 days
# 2 2 3.000000 days
答案 1 :(得分:0)
@Gregor的dplyr
解决方案应该有效。但是,如果dplyr
无法正常运行。您可以使用data.table
尝试该方法。
library(data.table)
setDT(x)
x[, .(duration = max(Timestamp) - min(Timestamp)), by = AreaID]
AreaID duration
1: 1 1.207639 days
2: 2 3.000000 days
或使用基础R的aggregate
功能。
aggregate(Timestamp ~ AreaID, data = x, FUN = function(x) max(x) - min(x))
AreaID Timestamp
1 1 1.207639
2 2 3.000000
为了使时间单位保持一致,我们可以使用difftime
函数和units
参数,这可能是&#34;小时&#34;,&#34;天&#34;或其他单位。
aggregate(Timestamp ~ AreaID, data = x,
FUN = function(x) difftime(max(x), min(x), units = "hours"))
AreaID Timestamp
1 1 28.98333
2 2 3.00000