-1

定義済みの列を含むデータ フレームを作成し、それに応じて列を設定できるようにしようとしています。

最初にNAが入力され、次にループに従ってさらに埋められる3つの同一の列を持つデータフレームを作成する次のコードがあります(同じループですが、異なる列を参照しています):

#Parameters    
Forecast.Days = 200
MBL = 500    

#Construct share of room nights by group component table
Share.of.Room.Nights = data.frame(Destination.1 = c(rep(NA, times = Forecast.Days)), Destination.2 = c(rep(NA, times = Forecast.Days)), 
                                  Destination.3 = c(rep(NA, times = Forecast.Days)))

#Destination 1
for (i in 1:length(Share.of.Room.Nights$Destination.1)){
  if (Future.Confirmed.Bookings$Total[i] >= MBL){
    Share.of.Room.Nights$Destination.1[i] = Future.Confirmed.Bookings[ ,3][i]/Future.Confirmed.Bookings$Total[i]
  } else {
      Share.of.Room.Nights$Destination.1[i] = Confirmed.Bookings[, 2][i]/Confirmed.Bookings$Total[i]
  }
}

#Destination 2
for (i in 1:length(Share.of.Room.Nights$Destination.2)){
  if (Future.Confirmed.Bookings$Total[i] >= MBL){
    Share.of.Room.Nights$Destination.2[i] = Future.Confirmed.Bookings[ ,4][i]/Future.Confirmed.Bookings$Total[i]
  } else {
    Share.of.Room.Nights$Destination.2[i] = Confirmed.Bookings[ ,3][i]/Confirmed.Bookings$Total[i]
  }
}

#Destination 3
for (i in 1:length(Share.of.Room.Nights$Destination.3)){
  if (Future.Confirmed.Bookings$Total[i] >= MBL){
    Share.of.Room.Nights$Destination.3[i] = Future.Confirmed.Bookings[ ,5][i]/Future.Confirmed.Bookings$Total[i]
  } else {
    Share.of.Room.Nights$Destination.3[i] = Confirmed.Bookings[ ,4][i]/Confirmed.Bookings$Total[i]
  }
}

初期データ フレームで作成する Destination 列の数のパラメーターを設定できるようにしたいと考えています。この場合は 3 (最大は 6) であり、必要な数のループのみを実行するコードを用意します (コードは 6 列分存在しますが、この場合は 3 列しか実行されません。

これは可能ですか?

ありがとう

4

2 に答える 2

0

以前に提案された答えを使用して

as.data.frame(matrix(0, nrow = ?, ncol = ?))

パラメータを入力して、定義済みのデータ フレームを作成できます。

Components = 3
Forecast.Days = 200    

Share.of.Room.Nights = as.data.frame(matrix(0, nrow = Forecast.Days, ncol = Components)) 

を使用if("Destination.1" %in% colnames(Share.of.Room.Nights))すると、列が存在するかどうかを判断できます。その後、ループを実行して、事前定義されたパラメーターに応じて存在する列にデータを入力できます。

于 2016-06-23T11:08:57.437 に答える