我知道標題可能有點混淆,但請允許我澄清。 我有值如何將公式插入到函數中,以便可以用它計算連續行的值
> df
Direction
139
118
180
142
185
224
137
245
列我有以下式
((pt1 - pt2 + 180)%%360 - 180)
我想插入此公式來計算每個連續實例 實施例的區別是:
((139 - 118 + 180)%%360 - 180) = 21
((118 - 180 + 180)%%360 - 180) = -62
我試過的一些東西
創建功能
angle <- function(turn1, turn2) {
coursediff <- ((turn1 - turn2 + 180)
%%360 - 180)
coursediff
}
angle(118, 180)
## [1] -62
嘗試使用它爲每個連續行的列方向,創建一個名爲DIFF
df$Diff <- with(df,
ave(Direction, ID, FUN=function(angle) c(NA, diff(angle))))
或者
df %>% group_by(ID) %>%
mutate(gap=angle(c(NA,diff(Direction)), 1))
或者
index <- function(angle) c(0, diff(angle))
DT <- data.table(df)
DT[, Diff := index(Direction), by = "ID"]
新列
甚至
transform(df,
Diff=unlist(tapply(Direction, ID,
function(angle) c(0, diff(Direction)))))
以上所有的嘗試給了我同樣的答案,就好像我是簡單地採取每行的差異,像這樣
df$Diff <- c(NA, diff(df$Direction))
這是我現在得到
> df
Direction Diff ID
139 NA 1
118 -21 1
180 62 1
142 -38 1
185 NA 2
224 39 2
137 -87 2
245 108 2
我希望有人能幫助我,非常感謝!
你是對的。我輸了。刪除評論。 – G5W
嗨@akrun我不確定滾動的區別是什麼。我只需要函數/公式爲每個連續行工作,並通過ID – avgjoe13