2013-03-29 5 views
6

新しいdata.tableを作成するか、単にdata.tableに列を追加したいとします。複数の新しい列を指定するのは簡単ですが、作成している列の1つに基づいて3番目の列に値を計算させたい場合はどうなりますか。私はplyrパッケージがそのようなことをすることができると思います。このような反復的な(順次)列の作成をdata.tableで実行できますか?私はどのようにして、r.tar.gz内の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)] 
+0

への呼び出し中に、あなたはそれらをあなたのDTに新しい列として値を保存するか、単純に出力しますか? –

+0

どちらか、または私は戸惑いません。ときどき私は保存したいと思うこともありますが、時々出力を見たいと思うこともあります。 – Farrel

答えて

8

<-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 
+0

(+1)これはすばらしいです! – Arun

+0

+1。すでに[#1492 Iterative RHS of:=](https://r-forge.r-project.org/tracker/?group_id=240&atid=978&func=detail&aid=1492)という機能リクエストが自動的に行われています。はい、Farrelは 'plyr'がこれをしていると言っています。本当にいいところです。 –

4

それは中に中括弧とセミコロンを使用することにより可能であるが、以下のようにやりたい

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 
関連する問題