2012-02-23 6 views
5

Rを学習しようとしていて、自己相関の例に固執しています。私はyの差に対してxの差を回帰させたい。私はxとyをデータフレームに持っていて、x2 - x1の違いをdxと言う新しい列に保存したいと思います。私はこれについてどうやって行くのか分かりません。私が持っているものRプログラミング:データフレーム内の2つのセルの差を計算し、新しい列に保存するにはどうすればいいですか?

DATA1

x y 
5 3 
8 9 
3 1 
1 5 
. . 
. . 
. . 

私が取得したいと思い何:

data1.dif 

x y dx dy 
5 3 NA NA 
8 9 3 6 
3 1 -5 -8 
1 5 -2 4 
. . . . 
. . . . 
+3

を2つの答えが言うように、 'diff'はこれを快適に行いますが、もしあなたが基本(例えば、忘れて) 'data1 [-1、 - data1 [-nrow(data1)、]'を見てください。より複雑な状況に適応することができます – Henry

答えて

5

使用diff、そして得られたベクトルの先頭にNAを貼り付けます。

transform
data1 <- read.table(text=' x y 
1 5 3 
2 8 9 
3 3 1 
4 1 5') 

# diff calculates the difference between consecutive pairs of 
# vector elements 
diff(data1$x) 
[1] 3 -5 -2 

# apply diff to each column of data1, bind an NA row to the beginning, 
# and bind the resulting columns to the original df 
data1.dif <- cbind(data1, rbind(NA, apply(data1, 2, diff))) 
names(data1.dif) <- c('x', 'y', 'dx', 'dy') 

data1.dif 
    x y dx dy 
1 5 3 NA NA 
2 8 9 3 6 
3 3 1 -5 -8 
4 1 5 -2 4 
+0

xまたはyに何らかのNAがある場合はどうなりますか? – user3841581

+0

@ user3841581 - 同じアプローチがうまくいくはずです...そうではありませんか? – jbaums

8

使用diff

降伏
dat <- read.table(text="x y 
5 3 
8 9 
3 1 
1 5", header=T) 


transform(dat, dx=c(NA, diff(x)), dy=c(NA, diff(y))) 

x y dx dy 
1 5 3 NA NA 
2 8 9 3 6 
3 3 1 -5 -8 
4 1 5 -2 4 

そしてOG dplyrとして:

library(dplyr) 

dat %>% 
    mutate(dx=c(NA, diff(x)), dy=c(NA, diff(y))) 
+0

+1それは私の答えよりも少しきれいです。良いですね。 – jbaums

関連する問題