0

以下を必要とする関数を作成しようとしています。

  1. 列名を変数として扱う
  2. 列の長さを取得する (または最後の行にアクセスする)
  3. 列内の行のサブセットを合計する

でステップ 1 を実行できますsapplyが、ステップ 2 で行き詰まっています。ベクトルの長さを取得するにはどうすればよいですか? 以下はデータセットの例です。

my.data <- read.table(text = '
   y1970  y1980  y1990
       5      7      9
      50     70     90
     500    700    900
    5000   7000   9000
', header = TRUE, na.string='NA', stringsAsFactors=FALSE)

ステップ 2 の望ましい結果は次のとおりです。

5000   7000   9000

ステップ 3 の結果は次のとおりです。

4445  6223  8001

ステップ 2 の関数は次のとおりです。

my.function <- function(x) { 
     names.x <- as.character(colnames(my.data)[x])
     x2 <- my.data[[x]][length(x)]   # returns first row of my.data
     return(x2=x2)
}
sapply(1:ncol(my.data), function(x) {my.function(x)})

# possible code for Step 3 if I get Step 2 to work:
(x2 - sum(my.data[[x]][1:(length(my.data[[x]])-1)], na.rm=TRUE)

これxlength == 1、上記のコードが の最初の行のみを返す理由を説明するものでありx2、最後の行だけではなく、私が返したい行です。

これらの操作は関数の外で簡単に実行できますが、列名を変数として使用できる関数内でこれらの操作を実行するにはどうすればよいでしょうか? アドバイスありがとうございます。

4

1 に答える 1