2017-08-16 1 views
1

私はPythonで data.frameの遅延はどのようにしますか?

R.

で全体のデータフレームに遅れるしたい、それが shift()機能 を使用して、これを行うことは非常に簡単です(例: df.shift(1))しかし

、私は簡単なようにいずれかを見つけることができませんでした簡単な方法はRのパンダshift()と同じです

どうすればいいですか?私が欲しいもの

> x = data.frame(a=c(1,2,3),b=c(4,5,6)) 
> x 
    a b 
1 1 4 
2 2 5 
3 3 6 

は、

> lag(x,1) 
> 
    a b 
1 NA NA 
2 1 4 
3 2 5 

どれでも良いアイデアですか?基地Rでかなり単純

答えて

2
library(dplyr) 
x %>% mutate_all(lag) 

    a b 
1 NA NA 
2 1 4 
3 2 5 
+1

試してみてください? – PoGibas

+0

いいえ、あなたは大丈夫です。私はそれを修正します。 – Lyngbakr

+0

もしOPがRに新しいものであれば、これは理解しやすいかもしれません: 'dplyr :: mutate_all(x、lag)' – PoGibas

3

rbind(NA, head(x, -1)) 
    a b 
1 NA NA 
2 1 4 
3 2 5 
head

と-1最初の引数は、NASの行を追加し、最終行とNAとrbindをドロップ。あなたはまた、これは、これを「修正」するために、最初の変数の列名にNAを残し、あなたはdata.frameを取り除くことができ、この

x[c(NA, 1:(nrow(x)-1)),] 
    a b 
NA NA NA 
1 1 4 
2 2 5 

のように、行のインデックス[を使用することができます


クラスと、それを再割り当て:

data.frame(unclass(x[c(NA, 1:(nrow(x)-1)),])) 
    a b 
1 NA NA 
2 1 4 
3 2 5 

をここでは、目的の遅れを生成するためにrepを使用することができます

data.frame(unclass(x[c(rep(NA, 2), 1:(nrow(x)-2)),])) 
    a b 
1 NA NA 
2 NA NA 
3 1 4 
も機能

myLag <- function(dat, lag) data.frame(unclass(dat[c(rep(NA, lag), 1:(nrow(dat)-lag)),])) 

にこれを入れて、あなたが本当に `` lag`にfuns`が必要ですそれ

myLag(x, 2) 
    a b 
1 NA NA 
2 NA NA 
3 1 4 
+0

ありがとうございました –

関連する問題