6

初心者の R ユーザーです。だから私は次のようにフォーマットされたデータセットを持っています:

    Date  Temp  Month
 1-Jan-90 10.56      1
 2-Jan-90 11.11      1
 3-Jan-90 10.56      1
 4-Jan-90 -1.67      1
 5-Jan-90  0.56      1
 6-Jan-90 10.56      1
 7-Jan-90 12.78      1
 8-Jan-90 -1.11      1
 9-Jan-90  4.44      1
10-Jan-90 10.00      1

R 構文:

datacl <- structure(list(Date = structure(1:10, .Label = c("1990/01/01", 
  "1990/01/02", "1990/01/03", "1990/01/04", "1990/01/05", "1990/01/06", 
  "1990/01/07", "1990/01/08", "1990/01/09", "1990/01/10"), class = "factor"), 
      Temp = c(10.56, 11.11, 10.56, -1.67, 0.56, 10.56, 12.78, 
      -1.11, 4.44, 10), Month = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
      1L, 1L)), .Names = c("Date", "Temp", "Month"), class = "data.frame", row.names = c(NA, 
  -10L))

特定の月のデータをサブセット化し、一時に変更係数を適用して結果を保存したいと考えています。だから私は次のようなものを持っています

idx <- subset(datacl, Month == 1)  # Index
results[idx[,2],1] = idx[,2]+change  # change applied to only index values

しかし、私は次のようなエラーが発生し続けます

Error in results[idx[, 2], 1] = idx[, 2] + change: 
  only 0's may be mixed with negative subscripts

どんな助けでも大歓迎です。

4

3 に答える 3

2

まず、変更係数に値を指定します。

change <- 1

次に、インデックスを作成する方法を示します。

# one approach to subsetting is to create a logical vector: 
jan.idx <- datacl$Month == 1

# alternatively the which function returns numeric indices:
jan.idx2 <- which(datacl$Month == 1)

1 月のデータのサブセットだけが必要な場合は、

jandata <- datacl[jan.idx,]
transformed.jandata <- transform(jandata, Temp = Temp + change) 

データ フレーム全体を保持し、変更係数のみを Jan temps に追加するには:

datacl$Temp[jan.idx] <- datacl$Temp[jan.idx] + change
于 2012-05-21T23:22:08.527 に答える
1

Personally, I would use ifelse() and leverage the syntactic beauty that is within() for a nice one liner datacl <- within(datacl, Temp <- ifelse(Month == 1, Temp + change,Temp)). Well, I said one liner, but you'd need to define change somewhere else too.

于 2012-05-22T00:30:40.493 に答える
1

最初に、subsetはインデックスを生成しないことに注意してください。 を含むすべての行を含む元のデータフレームのサブセットを生成しますMonth == 1

次に、実行しているときはidx[,2]、列を選択していTempます。

results[idx[,2],1] = idx[,2] + change

しかし、これらをへのインデックスresultsとして使用しています。つまり、行番号として使用しています。10.56行番号をやのようにすることはできない-1.11ため、エラーになります。resultsまた、最初の列を選択して、Dateそれに温度を追加しようとしています。

これを行うにはいくつかの方法があります。

次のようにしてTRUE、行用の論理インデックスを作成できます。Month == 1FALSE

idx <- datac1$Month == 1

次に、そのインデックスを使用して、変更する行を選択できますdatac1(これは、最初にやろうとしていたことだと思います):

datac1$Temp[idx] <- datac1$Temp[idx] + change  # or 'results' instead of 'datac1'?

の列と行をdatac1$Temp[idx]選択することに注意してください。Tempdatac1idx

あなたもできる

datac1[idx,'Temp']

また

datac1[idx,2]  # as Temp is the second column.

のサブセットだけになりたい場合は、次を試してください。resultsMonth == 1

results <- subset(datac1, Month == 1)
results$Temp <- results$Temp + change

これは、results関心のある行のみが含まれているためです。そのため、サブセット化を行う必要はありません。

于 2012-05-21T23:22:47.973 に答える