ここで何をしようとしているのか考えてみましょう。データフレームには8
の行がありますが、追加するベクトルには6
の要素しかありません。それらの要素をどの行に整列させるべきか?他の2つの場所にRを置くとどうなるでしょうか?
library(zoo)
dataframe <- read.table(text="Date Value
21/07/2016 14.8
22/07/2016 14.9
23/07/2016 15.8
24/07/2016 15.0
25/07/2016 15.7
26/07/2016 15.6
27/07/2016 16.1
28/07/2016 16.1", header=TRUE)
rollmedian(dataframe$Value,k=3)
# [1] 14.9 15.0 15.7 15.6 15.7 16.1
nrow(dataframe) # [1] 8
length(rollmedian(dataframe$Value,k=3)) # [1] 6
私は(私が間違っているなら、私を修正)あなたは何を意味するのかを推測することができますので、私がしようとするだろう:
dataframe$medianval <- c(NA, NA, rollmedian(dataframe$Value,k=3))
dataframe
# Date Value medianval
# 1 21/07/2016 14.8 NA
# 2 22/07/2016 14.9 NA
# 3 23/07/2016 15.8 14.9
# 4 24/07/2016 15.0 15.0
# 5 25/07/2016 15.7 15.7
# 6 26/07/2016 15.6 15.6
# 7 27/07/2016 16.1 15.7
# 8 28/07/2016 16.1 16.1
あなたが便利にこれを適応させることができるようにしたい場合は、あなたが書く必要があります単純な関数:
med.fun <- function(var, data, k){
# Note: variable name must be in quotes
return(c(rep(NA, k-1), with(data, rollmedian(get(var), k=k))))
}
med.fun("Value", dataframe, 5)
# [1] NA NA NA NA 15.0 15.6 15.7 15.7
あなたの助けと明確化のために多くの感謝の言葉。 c(NA、NA、...など)とは違った方法がありますか?例えば、異なる中央値の長さをテストするループを実行したいのですが? – carlosmaria