2013-03-29 8 views
6

में मैं एक नया data.table बनाना चाहते हैं या हो सकता है सिर्फ एक data.table करने के लिए कुछ कॉलम जोड़ें। यह कई नए कॉलम निर्दिष्ट करने के लिए आसान है, लेकिन क्या होता है अगर मैं एक तीसरे स्तंभ कॉलम मैं बनाने रहा हूँ में से एक के आधार पर एक मूल्य की गणना करना चाहते हैं। मुझे लगता है कि प्लीयर पैकेज ऐसा कुछ कर सकता है। क्या हम डेटाटेबल में ऐसे पुनरावर्तक (अनुक्रमिक) कॉलम निर्माण कर सकते हैं?मैं कैसे data.table में मक्खी स्तंभ पर मूल्यांकन कर सकते हैं (या बनाने के) एक r

मैं के रूप में

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

आप अपने डीटी में नए स्तंभ के रूप में मूल्यों को बचाने के लिए चाहते हैं या बस उन्हें उत्पादन करते हैं? –

+0

या तो मैं उग्र नहीं हूं। कभी-कभी मैं बचाना चाहता हूं और कभी-कभी मैं आउटपुट देखना चाहता हूं। – Farrel

उत्तर

8

आप 012 का भी उपयोग कर सकते हैं 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 भी। यह स्वचालित बनाने के लिए पहले से ही एक सुविधा अनुरोध है: [# 14 9 2 का इटरेटिव आरएचएस: =] (https://r-forge.r-project.org/tracker/?group_id=240&atid=978&func=detail&aid=1492)। हां जैसा कि फेरेल ने कहा था कि 'प्लीयर' ऐसा करता है और यह वास्तव में एक अच्छी सुविधा है। –

4

यह में घुंघराले ब्रेसिज़ और अर्धविराम का उपयोग करके संभव है इस प्रकार है क्या करना चाहते हैं j इसके बारे में जाने के लिए कई तरीके हैं, यहाँ हैं दो उदाहरण:

# 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 
संबंधित मुद्दे