0

データセットに対して関数 (差分計算など) を実行し、結果をデータ フレームに直接保存したい場合があります。

df <- data.frame(a$C, diff(a$C))

しかし、行数が異なるため、それはできません。

おそらくNA、関数 ( diff()) が結果を返さない場合に、それを可能にする構文はありますか?

4

2 に答える 2

3

これに対する一般的な解決策は、使用したい機能の全体について膨大な仮定を立てることなしにはありません。

diff()あなたが示した例では、からの最初の値が返されたNA場合に簡単に解決できます。

set.seed(5)
d <- rpois(10, 5)

> d
 [1] 3 6 8 4 2 6 5 7 9 2
> diff(d)
[1]  3  2 -4 -2  4 -1  2  2 -7

したがって、使用している場合は、diff()いつでも次のことができます。

> dd <- data.frame(d, Diff = c(NA, diff(d)))
> dd
   d Diff
1  3   NA
2  6    3
3  8    2
4  4   -4
5  2   -2
6  6    4
7  5   -1
8  7    2
9  9    2
10 2   -7

NAしかし、ここで、常に正しい場所に返されるとは限らない、使用したい可能性のある他の関数をどうするかを考えてみてください。

この例では、引数を持つZooパッケージを使用できます。na.pad

require(zoo)
d2 <- as.zoo(d)
ddd <- data.frame(d, Diff = diff(d2, na.pad = TRUE))

> ddd
   d Diff
1  3   NA
2  6    3
3  8    2
4  4   -4
5  2   -2
6  6    4
7  5   -1
8  7    2
9  9    2
10 2   -7

数式インターフェイスでモデリング関数を使用しており (例: lm())、その関数にna.action引数がある場合na.action = na.exclude、関数呼び出しで設定するとfitted()、などの抽出関数が出力の正しい場所にresid()追加されて、NA出力は、モデリング関数に渡されたデータと同じ長さです。

調査したい他の具体的なケースがある場合は、回答を編集してください。特定のケースでは、通常、質問に対する簡単な回答があります。一般的なケースでは、回答がノーであり、あなたが求めていることを実行することはできません。

于 2012-07-05T12:47:27.260 に答える
3

標準的な方法は、あなたが言うように、一方の端または他方の端が NA で拡張されたベクトルを作成することです。

  dfrm$diffvec <- c(NA, diff(firstvec) )
于 2012-07-05T12:44:06.370 に答える