まず、私たちが使用できるように、データの出所を明記してください。 library(ISLR)
の下に見つかりました。
私はstats :: lag関数が嫌いです。ラグ関数からの遅れた値の追加には問題があります。
lag(Auto$horsepower[1:8], 1)
#[1] 130 165 150 150 140 198 220 215
#attr(,"tsp")
#[1] 0 7 1
lag(Auto$horsepower[1:8], 2)
#[1] 130 165 150 150 140 198 220 215
#attr(,"tsp")
#[1] -1 6 1
lag(Auto$horsepower[1:8], 1) + lag(Auto$horsepower[1:8], 2)
#[1] 260 330 300 300 280 396 440 430
#attr(,"tsp")
#[1] 0 7 1
これは動作しません:私は何を意味するかを紹介します。データを正しくサブセット化する手段を提供しますが、実際には使用できません。これは、リードとラグの両方のために誰かの人生を容易にするために、完璧なベクトル化機能となり
shift(Auto$horsepower[1:8], 1:2)
# [,1] [,2]
#[1,] 0 0
#[2,] 130 0
#[3,] 165 130
#[4,] 150 165
#[5,] 150 150
#[6,] 140 150
#[7,] 198 140
rowSums(shift(Auto$horsepower[1:8], 1:2))
#[1] 0 130 295 315 300 290 338 418
:何が本当にしたいことのようなものです。 ので、私は以下のことを書きました:今、あなたは簡単に先に行くとしてあなたのコードを修正することができます
shift <- function(x, i = 1, NA2zero = TRUE, naming = NULL){
Z <- ifelse(NA2zero, 0, NA)
L <- sapply(i, function(i){ "if"(i > 0,
c(rep(Z, max(abs(i))),
x[-c((length(x)+1-i):length(x))]),
"if"(i < 0,
c(x[-c(1:abs(i))],
rep(Z, max(abs(i)))),
x))
})
"if"(is.null(naming),
colnames(L) <- paste0(deparse(substitute(x)),".",i),
colnames(L) <- paste0(naming,".",i))
return(L)
}
:
head(shift(Auto$horsepower, 0:2, naming = "HP"),3)
HP.0 HP.1 HP.2
[1,] 130 0 0
[2,] 165 130 0
[3,] 150 165 130
:
L2HPbyWT = 1000*((rowSums(shift(Auto$horsepower, i = 1:2))/rowSums(shift(Auto$weight, i = 1:2))))
私も楽しい小さな命名機能を追加しました編集:それは、あなたがラグ関数afterallを必要としなかったようです! 今質問にお答えします。私はdplyrに入ったことがないので、これがベースになるので、私を許してください。あなたは車の別の年に遅れているようです。だから我々は車を見て: dim(自動) #[1] 392 9#かなり大きい、たくさんの行。
# split them into groups by type of car
eachAuto <- split(Auto, Auto$name)
table(sapply(eachAuto, nrow))
# 0 1 2 3 4 5 # lengths
# 3 245 34 12 7 3 # counts
今はそうで0行(データがないいくつかの因子レベルが存在する)、1つだけの行と245台の車、3行12台の自動車、との3台の車があることがわかり。
ここでは名前列を使用するのは間違いです...使用できる車を制限しない限りですか? 方法について:あなたは正確にだけ遅れのために利用可能な車を使用している今
MAXLAG <- 2
Autos_subset <- eachAuto[sapply(eachAuto, nrow) > (MAXLAG-1)]
newAuto <- lapply(Autos_subset, function(x) {
x$L2HPbyWT <- 1000*((rowSums(shift(x$horsepower, i = 1:MAXLAG))/rowSums(shift(x$weight, i = 1:MAXLAG))))
x
})
length(newAuto) # 56 car names in the list
。私が非常に良いかもしれないので、マークを紛失しているかどうか私に教えてください。
助けてくれてありがとう!私はそれがベースにあると思った、それはISLRにあったことを認識していなかった。また、私が使っている 'lag'はdpylr(stats :: lagがあったことさえ知りませんでした)なので、 ' lag(Auto $ horsepower [1:8]、1)+ lag(Auto $ 2)「 」は、所望により 「NA NA 295 315 300 290 338 418」となる。私はあなたのコードをチェックアウトします! – CoolGuyHasChillDay
自分のコードを修正しました!今より良いはずです。 –
よかったよ、ありがとう!私の前のコメントを読んでしまった?私が使用している '遅れ'は、 'stat'ではなく' dplyr'を通っているので、あなたのものと同じように動作しますが、私のコードではモデルと年ごとに分割することができます。 Re:「非時系列データに対する遅れのポイント」とは、時系列とは車のモデル(年の2桁の数字)です。私の元のコードは、まさにそれを行う必要があります、私は15 +の列のためにそれを行う必要があります。これを手動で行うのは問題ありませんが、私の元の質問は、それが複数の列にわたって繰り返されるかどうかを尋ねることでした。 – CoolGuyHasChillDay