7

新しい data.table を作成するか、data.table にいくつかの列を追加したいだけです。複数の新しい列を指定するのは簡単ですが、作成している列の 1 つに基づいて 3 番目の列に値を計算させたい場合はどうなりますか。plyr パッケージはそのようなことができると思います。data.table でこのような反復的な (順次) 列の作成を実行できますか?

私は次のようにしたい

dt <- data.table(shop = 1:10, income = 10:19*70)
dt[ , list(hope = income * 1.05, hopemore = income * 1.20, hopemorerealistic = hopemore - 100)]  

または多分

dt[ , `:=`(hope = income*1.05, hopemore = income*1.20, hopemorerealistic = hopemore-100)]
4

2 に答える 2

9

たとえば<-、呼び出し内で使用することもできますlist

DT <- data.table(a=1:5)


DT[, c('b','d') := list(b1 <- a*2, b1*3)]
DT
   a  b  d
1: 1  2  6
2: 2  4 12
3: 3  6 18
4: 4  8 24
5: 5 10 30

または

DT[, `:=`(hope = hope <- a+1, z = hope-1)]
DT
   a  b  d hope z
1: 1  2  6    2 1
2: 2  4 12    3 2
3: 3  6 18    4 3
4: 4  8 24    5 4
5: 5 10 30    6 5
于 2013-03-30T01:03:24.827 に答える
5

中括弧とセミコロンを使用することで可能です。これにj は複数の方法があります。ここに 2 つの例を示します。

# If you simply want to output: 

dt[ ,
  {hope=income*1.05;
   hopemore=income*1.20;
   list(hope=hope, hopemore=hopemore, hopemorerealistic=hopemore-100)}
]


# if you want to save the values

dt[ , c("hope", "hopemore", "hopemorerealistic")  := 
  {hope=income*1.05;
   hopemore=income*1.20;
   list(hope, hopemore, hopemore-100)}
]
dt
#     shop income   hope hopemore hopemorerealistic
#  1:    1    700  735.0      840               740
#  2:    2    770  808.5      924               824
#  3:    3    840  882.0     1008               908
#  4:    4    910  955.5     1092               992
#  5:    5    980 1029.0     1176              1076
#  6:    6   1050 1102.5     1260              1160
#  7:    7   1120 1176.0     1344              1244
#  8:    8   1190 1249.5     1428              1328
#  9:    9   1260 1323.0     1512              1412
# 10:   10   1330 1396.5     1596              1496
于 2013-03-30T00:36:10.827 に答える