3

私はRの初心者です(Stataの世界から来ました)。時間を節約するために、ループ関数を使用して、データ フレーム (約 70,000 行の長さ) 内の既存のデータ列の累乗を生成しようとしています。既存の列は OrdersData$timecount と呼ばれます。OrdersData$timecount2=OrdersData$timecount^2、OrdersData$timecount3=OrdersData$timecount^3 などの 9 乗を自動化しようとしています。コマンドですべてを1つにしようとしています:

i<-1;
for(i in 1:9){paste(OrdersData$timecount,"[i+1]",sep="")<-OrdersData$timecount^[i+1]}

「テキスト」というエラーが表示されます。私は何を間違っていますか?

4

2 に答える 2

3

考え込むのをやめてイディオムstataを使う必要があります。R

これが機能するアプローチです(そして、あなたが考えるのをやめさせますstata

  DF <- data.frame(timeCount = seq(0,1,l=3))
  # use lapply to create a list
  # with elements timeCount^1, timeCount^2, .... etc
  powered <- lapply(1:9, function(x,y) x^y, x = DF$timeCount)
  # give names that make sense
  names(powered) <-  paste0('timeCount',1:9)
  # convert to a data.frame
  newDF <-  as.data.frame(powered)

  newDF



  timeCount1 timeCount2 timeCount3 timeCount4 timeCount5 timeCount6 timeCount7 timeCount8  timeCount9
1        0.0       0.00      0.000     0.0000    0.00000   0.000000  0.0000000 0.00000000 0.000000000
2        0.5       0.25      0.125     0.0625    0.03125   0.015625  0.0078125 0.00390625 0.001953125
3        1.0       1.00      1.000     1.0000    1.00000   1.000000  1.0000000 1.00000000 1.000000000

@Brandonの答えは従うのが簡単かもしれませんが、ループ内でdata.frameを成長させると、毎回少なくとも1回はdata.frameが(内部的に)コピーされます。

于 2012-10-30T03:43:50.787 に答える
2

エラーは<-、変数を(変数ではなく)文字列に割り当てることで発生します。コマンドを使用して変数を「作成」できますassign。を参照?assignしてください?get(あなたの現在の試みを考慮して両方を読むための貴重な学習経験)

ただし、作成しようとしたものの多くに一致するforループを使用できます。

for(i in 1:9) {
OrdersData[paste("timecount",i+1,sep="")] <- OrdersData$timecount^i
}

入力するよりも考えるのに時間がかかる場合があります。

OrdersData$timecount2 <- OrdersData$timecount^2
OrdersData$timecount3 <- OrdersData$timecount^3
OrdersData$timecount4 <- OrdersData$timecount^4
OrdersData$timecount5 <- OrdersData$timecount^5
OrdersData$timecount6 <- OrdersData$timecount^6
OrdersData$timecount7 <- OrdersData$timecount^7
OrdersData$timecount8 <- OrdersData$timecount^8
OrdersData$timecount9 <- OrdersData$timecount^9
于 2012-10-30T03:43:12.280 に答える