タイトルが少し混乱するかもしれないがわかりましたが、わかりやすくしてください。 私は各連続インスタンス間 例差を計算するために、この数式を挿入したい私は、次の式連続した行の値を計算するために関数に式を挿入する方法
((pt1 - pt2 + 180)%%360 - 180)
を有する値
> df
Direction
139
118
180
142
185
224
137
245
でカラムを有する:
((139 - 118 + 180)%%360 - 180) = 21
((118 - 180 + 180)%%360 - 180) = -62
私が試したことのいくつか
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"]
デフという名前の新しい列を作成し、列方向のための連続した各列のためにそれを使用しようとする機能
angle <- function(turn1, turn2) {
coursediff <- ((turn1 - turn2 + 180)
%%360 - 180)
coursediff
}
angle(118, 180)
## [1] -62
を作成します
あるいは
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