2013-05-28 16 views
28

मैं प्रत्येक डेटा को अलग-अलग संदर्भित किए बिना बड़े डेटा में कॉलम के समूह में फ़ंक्शन लागू करने का प्रयास कर रहा हूं।आर डेटाटेबल, कॉलम के सबसेट में एक फ़ंक्शन लागू करें

a <- data.table(
    a=as.character(rnorm(5)), 
    b=as.character(rnorm(5)), 
    c=as.character(rnorm(5)), 
    d=as.character(rnorm(5)) 
) 
b <- c('a','b','c','d') 
ऊपर मेगावाट साथ

, इस:

a[,b=as.numeric(b),with=F] 

काम करता है, लेकिन इस:

a[,b[2:3]:=data.table(as.numeric(b[2:3])),with=F] 

काम नहीं करता। as.numeric फ़ंक्शन को अलग-अलग संदर्भित किए बिना a के कॉलम 2 और 3 पर लागू करने का सही तरीका क्या है।

(वास्तविक डेटा में सेट वहाँ कॉलम के दसियों तो यह अव्यावहारिक होगा रहे हैं)

धन्यवाद

उत्तर

40

मुहावरेदार दृष्टिकोण .SD और .SDcols

उपयोग करने के लिए आप आरएचएस होने के लिए मजबूर कर सकते हैं है ()

a[, (b) := lapply(.SD, as.numeric), .SDcols = b] 

में रैपिंग द्वारा माता-पिता फ्रेम में मूल्यांकन कॉलम के लिए 2: 3

a[, 2:3 := lapply(.SD, as.numeric), .SDcols = 2:3] 

या

mysubset <- 2:3 
a[, (mysubset) := lapply(.SD, as.numeric), .SDcols = mysubset] 
+0

आप "से" उपयोग करना चाहते हैं यहाँ समूहीकरण, है कि शामिल किया जाना है अग्रिम में, 'mysubset' में? –

+1

@TrevorAlexander - नहीं, कॉलम 'एसडी' में नहीं हैं, वे पर्यावरण में एकल मान के रूप में मौजूद हैं जिसमें 'एसडी' बनाया गया है। – mnel

+0

हाय अगर मैं सभी कॉलम पर फ़ंक्शन को लागू करना चाहता हूं लेकिन 'बी' का उपयोग कैसे करूं? धन्यवाद! – Christa

संबंधित मुद्दे