मैं सशर्त एक data.frame से स्तंभ के चयन के लिए निम्नलिखित मुहावरा का उपयोग से स्तंभ के चयन के लिए:मुहावरा सशर्त एक data.table
DF = data.frame(a = 1:3,b = letters[1:3],c = LETTERS[1:3])
someCondition <- FALSE
# use `if(someCondition)` to conditionally include column 'c'
DF[,c('a','b',if(someCondition)'c')]
:> a b
:> 1 1 a
:> 2 2 b
:> 3 3 c
लेकिन बराबर data.table के बी/सी शून्य साथ काम नहीं करता मूल्यों सूची से गिरा नहीं कर रहे हैं उसी तरह वे संयोजन से हटा दिया जाता है:
DT = as.data.table(DF)
DT[,.(a,b,if(someCondition)c)]
:> Error in setnames(jval, jvnames) :
:> Can't assign 3 names to a 2 column data.table
मैं एक समारोह ..
नामक एक काम के आसपास है जो परिभाषित किया है:
.. <- function(...){
x = list(...)
x= x[!sapply(x,is.null)]
x
}
DT[,..(a,b,if(someCondition)c)]
:> V1 V2
:> 1: 1 a
:> 2: 2 b
:> 3: 3 c
लेकिन यह एक ऐसा ऑपरेशन पूरा करने के लिए अपने स्वयं के फ़ंक्शन को शामिल करने के लिए प्रकार की तरह दिखता है जो इतना आम है। क्या डेटाटेबल से सशर्त रूप से कॉलम चुनने का एक और बेवकूफ तरीका है?
'\' [.noquote \ '(डीटी, सी ('ए', 'बी', अगर (कुछ शर्त) 'सी'))' या 'डीटी [, सी ('ए', 'बी', अगर (कुछ कंडिशन) 'सी'), = गलत] के साथ 'यदि आप '[.noquote'' के चमत्कारों की सराहना नहीं कर सकते हैं। – Frank
यह सुनिश्चित नहीं है कि इसे डुप्लिकेट के रूप में क्यों चिह्नित किया गया है .. कृपया एक बग रिपोर्ट दर्ज करें। – Arun
@akrun, स्पष्ट रूप से 'डीटी [,। (ए, बी, अगर (कुछ शर्त) सी)] 'काम नहीं करता है जैसा कि यह करना चाहिए। यह एक डुप्लिकेट क्यों होगा? – Arun