4

mydata特定の年齢と特定の身長を持つ人の数で呼び出されるRデータフレームがあります。したがって、データフレームには、変数mydata$ageto10(= 10 歳までの人数)、mydata$ageto20(= 20 歳までの人数) など、35、42、および 65 歳の変数があります。同じことが言えます。高さ(および他のいくつかの変数)。

年齢範囲 10 から 25、年齢範囲 25 から 35、35 から 42、および 42 から 65 内の人数のカウントを参照する新しい変数を作成したいと考えています。したがって、最初のケースでは、次のことを行います。

mydata$age10to25 <- mydata$ageto25 - mydata$ageto10

これは機能しますが、すべての範囲でこれを行い、高さと他の変数についても同じことを行いたいと考えています。これを 40 回コピーして貼り付け、変数名を手動で変更するよりも簡単な方法があるに違いありません。:)

私はそれが次のようなものであるべきだと思った:

for (i in c("age", "height"))
{
  for (k in c(10,20,35,42, 65))
  {
  assign(paste("mydata$", i, k, "to", <<next k here>>, sep=""), get(paste("mydata$", i, <<next k here>>, , sep="")) - get(paste("mydata$", i, k, , sep=""))
  }
}

しかし、明らかにこれは機能しません (手動で k を入力しても、assignコマンドは現在のデータに変数名を割り当てるためのものではないようです。

これを行う最善の方法は何ですか?

4

1 に答える 1

6

あなたは別の統計パッケージからの難民だと思います (stataおそらく またはSAS)。$assign を使用して、 およびを使用して列に割り当てることはできませんpaste。一般assignに、標準的なタスクに使用している場合は、慣用的ではないことを行っているか、Rより良い解決策があります。

何かのようなもの

lower <- c(10,25,35,42)
upper <- c(25,35,42,65)

# create the differences
newData <-   myData[,paste0('ageto',upper)] - myData[, paste0('ageto',lower)]
# name them with valid names (not starting with numbers
names(newData) <- paste0('from',lower,'to',upper)
# add as columns to the original
myData <- cbind(myData, newData)

ループは必要ありません!

于 2012-10-30T22:25:43.603 に答える