簡體   English   中英

在R包“ plyr”中使用ddply創建新列

[英]Creating a new column using ddply in the R package “plyr”

我正在研究動物跟蹤數據集,並且需要為每個人計算每個GPS位置的時間戳之間的時間差。 為了簡單起見,我的數據看起來像這樣(現在暫時忘記其他變量):

ID  Time
B1  6:57
B1  6:59
B1  7:03
B1  7:10
B2  6:34
B2  6:45
B2  6:47
B2  6:48
B3  6:23
B3  6:35
B3  6:46
B3  6:47

我嘗試使用以下方法計算時差:

ddply(df, "ID",transform,timediff=diff(Time))

但是我收到此錯誤消息:

data.frame中的錯誤(list(ID = c(1L,1L,1L,1L),時間= 8:11):
參數暗示不同的行數:4,3

我認為問題是每個動物的第一行都沒有值。 有沒有解決的辦法? 任何幫助深表感謝。

您可以使用data.table

 library(data.table)

# create a lag variable of time by ID
setDT(data)[, timediff:=c(NA, Time[-.N]), by=ID]

dt
#>     ID Time timediff
#>  1: B1 6:57       NA
#>  2: B1 6:59        8
#>  3: B1 7:03        9
#>  4: B1 7:10       10
#>  5: B2 6:34       NA
#>  6: B2 6:45        2
#>  7: B2 6:47        4
#>  8: B2 6:48        6
#>  9: B3 6:23       NA
#>  10: B3 6:35       1
#>  11: B3 6:46       3
#>  12: B3 6:47       5

我們可以從base R使用ave

 df1$timediff <- with(df1, ave(as.numeric(Time), ID, FUN = function(x) c(NA, diff(x))))

假設“時間”屬於日期時間類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM