2017-02-04 13 views
1
Date FXDL.AED.USD FXDL.ALL.USD FXDL.AMD.USD FXDL.ANG.USD 
03/01/2005 3.6726 92.1 484 1.779999971 
04/01/2005 3.6726 92.1 487 1.779999971 
05/01/2005 3.6725 94.5 490.5 1.779999971 
06/01/2005 3.6726 95.1 490.5 1.779999971 
07/01/2005 3.6725 95.3 493.5 1.779999971 
08/01/2005 NA NA NA NA 
09/01/2005 NA NA NA NA 
10/01/2005 3.6726 96.9 497.5 1.779999971 
11/01/2005 3.6725 97.2 502.5 1.779999971 

上記のデータフレームには多数の列がありますが、上のほんの一部ですが、それぞれの連続する行の違いカラム。例えば、列3の各列の値 - 2、行4 - - 3行5 4等R - 各列の連続する行の違いを見つける方法

Iは、次のコードを使用している:

x_diff <- x[-1,] - x[-nrow(x),] 

をこれがエラーを思い付きますいくつかのフィールドにはNA項があるからと考えていますが、これらのNA項も加算してNAを返すことができます。

EDIT:

structure(list(Weekday = c(1, 2, 3, 4, 5), Date = structure(c(1104710400, 
1104796800, 1104883200, 1104969600, 1105056000), class = c("POSIXct", 
"POSIXt"), tzone = "UTC"), FXDL.AED.USD = c("3.6726000000000001", 
"3.6726000000000001", "3.6724999999999999", "3.6726000000000001", 
"3.6724999999999999"), FXDL.ALL.USD = c("92.1", "92.1", "94.5", 
"95.1", "95.3"), FXDL.AMD.USD = c("484", "487", "490.5", "490.5", 
"493.5")), .Names = c("Weekday", "Date", "FXDL.AED.USD", "FXDL.ALL.USD", 
"FXDL.AMD.USD"), row.names = c(NA, 5L), class = c("tbl_df", "tbl", 
"data.frame")) 
+1

' sapply(X [、sapply(X、is.numeric)]、差分)でこれを行うことができます。上記のコードは、データフレーム 'x'の各数値列に' diff'関数(2つの値の差)を適用します。 – eipi10

+0

ありがとう!しかし、これは最初の列に対してのみ行うようです。 – isuckatcoding

+0

@isuckatcoding; eipi10のコードはうまくいくはずですので、あなたの質問にあなたのデータの小さな例を追加することができます:これは、 'dput(x [1:5、1:5])'の結果をあなたの質問に加えることで可能になります。ありがとう。 (psで、あなたは 'sapply' ineipiのコードを明示的に行列に変換するのを避けることができると思います...' diff(as.matrix(x [、is.numeric)])))) ') – user20650

答えて

0

我々は `tidyverse

library(tidyverse) 
df1 %>% 
    mutate_each(funs(c(NA, diff(as.numeric(.)))), 3:5) 
関連する問題