आर

2013-08-30 11 views
11

में कारकों के लिए एकाधिक डेटाटेबल कॉलम को कनवर्ट करना मैं डेटा तालिका के एकाधिक कॉलम को कारक कॉलम में कनवर्ट करने का प्रयास करते समय एक अनपेक्षित समस्या में भाग गया।आर

library(data.table) 
tst <- data.table('a' = c('b','b','c','c')) 
class(tst[,a]) 
tst[,as.factor(a)] #Returns expected result 
tst[,as.factor('a'),with=FALSE] #Returns error 

बाद आदेश रिटर्न 'Math.factor करने में त्रुटि (जे): कारकों के लिए कोई महत्व नहीं रह पेट' इस प्रकार मैं इसे reproduced गए हैं। मुझे यह पता चला कि tst [, lapply (cols, as.factor), = FALSE के साथ] जहां कोल्स पंक्तियों का संग्रह था, मैं कारकों में परिवर्तित करने का प्रयास कर रहा था। क्या इसके लिए कोई समाधान या समाधान है?

library(data.table) 
tst <- data.table('a' = c('b','b','c','c')) 
class(tst[,a]) 
cols <- 'a' 
tst[,(cols):=lapply(.SD, as.factor),.SDcols=cols] 

फिर भी, जैसा कि पहले उल्लेख किया है-व्यवहार गाड़ी लगता है:

+3

+1 मैंने जोड़ा है: [गलती से आंतरिक पेट() त्रुटि को जम्मू = FALSE के साथ पकड़ें लेकिन जे गलत तरीके से कारक है] (https://r-forge.r-project.org/tracker/index.php ? func = detail & aid = 4867 और group_id = 240 और atid = 978) –

उत्तर

23

मैं एक समाधान मिल गया।

+0

आप किसी कारक के साथ डेटा.table को अनुक्रमणित करने का प्रयास कर रहे थे - कारक न तो वर्ण हैं और न ही संख्यात्मक (वे स्पष्ट मान वाले स्पष्ट मूल्य हैं), इसलिए डेटाटेबल एक त्रुटि थूकता है। – thelatemail

+1

इसके अलावा 'tst [, as.factor (a)]' बस 'as.factor (tst $ a)' लौट रहा है और डेटाटेबल को बिल्कुल अनुक्रमणित नहीं कर रहा है। मेरा मतलब क्या है यह देखने के लिए 'tst [, 1: 5]' आज़माएं। – thelatemail

+1

आप 'tst [, a: = as.factor (a)]' का प्रयास कर सकते हैं, यदि आपके पास केवल एक कॉलम है या आपने जो दिखाया है वह करें या प्रत्येक कॉलम पर फॉर-लूप के भीतर 'सेट' का भी उपयोग करें। – Arun

2

अब यह v1.8.11 में तय किया गया है, लेकिन शायद के लिए जिस तरह से आप उम्मीद कर रहे थे उसमें नहीं। NEWS से:

FR # 4867 अब लागू किया गया है। DT[, as.factor('x'), with=FALSE] जहां xDT में एक कॉलम है, अब एक त्रुटि के साथ समाप्त होने के बजाय DT[, "x", with=FALSE] के बराबर है। धन्यवाद इतने पर रिपोर्ट करने के लिए tresbot रहे हैं: Converting multiple data.table columns to factors in R


कुछ स्पष्टीकरण: अंतर है, जब with=FALSE प्रयोग किया जाता है, कि data.table के स्तंभों चर के रूप में अब नहीं देखा जाता है। यह है:

tst[, as.factor(a), with=FALSE] # would give "a" not found! 

परिणामस्वरूप "a" not found त्रुटि होगी। लेकिन क्या आप के बजाय करते हैं:

tst[, as.factor('a'), with=FALSE] 

आप वास्तव में level="a" के साथ एक कारक "a" बना रहे हैं और सबसेट उस स्तंभ करने के लिए कहा। यह वास्तव में ज्यादा समझ में नहीं आता है। data.frame रों के मामले लें:

DF <- data.frame(x=1:5, y=6:10) 
DF[, c("x", "y")] # gives back DF 

DF[, factor(c("x", "y"))] # gives back DF again, not factor columns 
DF[, factor(c("x", "x"))] # gives back two columns of "x", still integer, not factor! 

तो, मूल रूप से, क्या आप पर, जब आप with=FALSE का उपयोग एक कारक लागू कर रहे हैं उस स्तंभ के तत्वों पर नहीं, लेकिन सिर्फ इतना है कि स्तंभ नाम है ... मुझे उम्मीद है कि मैंने अंतर को अच्छी तरह से व्यक्त करने में कामयाब रहा है। अगर कोई भ्रम हो तो संपादित/टिप्पणी करने के लिए स्वतंत्र महसूस करें।