0

これは、昨年このサイトで私のためにうまく答えられた質問へのフォローアップの質問ですR を使用して欠損値の前に列の最後の10個の値の平均を取得する方法を参照してください。

以前、欠損値の前の列の最後の 10 行の平均を取る方法を尋ねました。私のデータは樹木の成長率です。最初の列は年で、右側の列は個々の木の成長率で、各樹木が枯れた年で終わります。各木が「生まれる」前と木が枯れた後の成長率の値はNAです。各木が枯れるまでの過去 10 年間の平均を取る必要があったとき、機能したコードは次のとおりです。

sapply(dataframe, function(dataframe) mean(tail(na.omit(dataframe), 10)))

後で、各木の寿命の最初の 50 年間の平均成長率を取得する必要があったため、次のコードを使用して「尾」を「頭」に置き換えてこれを行いました。

sapply(dataframe, function(dataframe) mean(head(na.omit(dataframe), 50)))

さて、私の質問は、最初の 50 年から 100 年の成長の間の各木の成長の平均をどのように取るかということです。では、樹齢 50 ~ 100 年の各樹木の平均成長率を知りたいですか? 特定の行間の平均を取ることを可能にする (「頭」または「尾」に似た) 私が知らない関数はありますか? 難しいのは、それぞれの木が別の年に生まれた (または亡くなった) ことです。

ご協力いただきありがとうございます。

ケイティ

4

1 に答える 1

0

組み合わせるheadと、tail必要なものを得ることができます。例えば:

> x<-1:10
> tail(head(x,4),2)
[1] 3 4

したがって、あなたの場合、あなたが望むのは次のようになります:

sapply(dataframe, function(x) mean(tail(head(na.omit(x), 100),50)))

必要に応じて、明示的なインデックスを使用することもできます。これはna.omit、すべての NA 値が削除na.omit(x)[51:100]されるため、ツリーが誕生してから 51 ~ 100 年になるからです。だからあなたも一緒に行くことができます

sapply(dataframe, function(x) mean(na.omit(x)[51:100]))

2 つの唯一の違いは、列の有効なエントリが 100 未満の場合にどうなるかです。この場合、head/tail メソッドは最後の 50 個の有効なエントリの平均 (合計が 50 個未満の場合はそれ以下) を返しますが、51:100 メソッドは NA を返します。

于 2013-10-29T17:59:07.100 に答える