2013-06-25 9 views
6

मैं किसी पाठ फ़ाइल में आर में एक dataframe लिखने के लिए कोशिश कर रहा हूँ में पाठ फ़ाइल में dataframe निर्यात, लेकिन यह निम्न त्रुटि के लिए लौट रहा है:त्रुटि जब आर

Error in if (inherits(X[[j]], "data.frame") && ncol(xj) > 1L) 
      X[[j]] <- as.matrix(X[[j]]) : 
    missing value where TRUE/FALSE needed 

मैं निर्यात के लिए निम्न आदेश का प्रयोग किया:

write.table(df, file ='dfname.txt', sep='\t') 

मुझे नहीं पता कि समस्या क्या हो सकती है। जहां तक ​​"अनुपलब्ध डेटा जहां TRUE/FALSE की आवश्यकता है", मेरे पास केवल एक कॉलम है जिसमें TRUE/FALSE मान हैं, और इनमें से कोई भी मूल्य गुम नहीं है। dataframe की

सामग्री:

> str(df) 
'data.frame': 776 obs. of 15 variables: 
$ Age   : Factor w/ 4 levels "","A","J","SA": 2 2 2 2 2 2 2 2 2 2 ... 
$ Sex   : Factor w/ 2 levels "F","M": 1 1 1 1 2 2 2 2 2 2 ... 
$ Rep   : Factor w/ 11 levels "L","NR","NRF",..: 1 1 4 4 2 2 2 2 2 2 ... 
$ FA   : num 61.5 62.5 60.5 61 59.5 59.5 59.1 59.2 59.8 59.9 ... 
$ Mass  : num 20 19 16.5 17.5 NA 14 NA 23 19 18.5 ... 
$ Vir1  : num 999 999 999 999 999 999 999 999 999 999 ... 
$ Vir2  : num 999 999 999 999 999 999 999 999 999 999 ... 
$ Vir3  : num 40 999 999 999 999 999 999 999 999 999 ... 
$ Location : Factor w/ 4 levels "Loc1",..: 4 4 4 4 4 4 2 2 2 2 ... 
$ Site  : Factor w/ 6 levels "A","B","C",..: 5 5 5 5 5 5 3 3 3 3 ... 
$ Date  : Date, format: "2010-08-30" "2010-08-30" ... 
$ Record  : int 35 34 39 49 69 38 145 112 125 140 ... 
$ SampleID : Factor w/ 776 levels "AT1-A-F1","AT1-A-F10",..: 525 524 527 528 
                   529 526 111 78 
                   88 110 ... 
$ Vir1Inc  : logi FALSE FALSE FALSE FALSE FALSE FALSE ... 
$ Month  :'data.frame': 776 obs. of 2 variables: 
    ..$ Dates: Date, format: "2010-08-30" "2010-08-30" ... 
    ..$ Month: Factor w/ 19 levels "Apr-2011","Aug-2010",..: 2 2 2 2 
                  2 2 18 18 18 18 ... 

मुझे आशा है कि मैं काफी/सही जानकारी दी है ...

बहुत धन्यवाद, हीथ

+3

मुझे लगता है कि क्योंकि आपका data.frame मदद फ़ाइल @agstudy एक नेस्टेड data.frame नाम महीना ... – agstudy

+0

शामिल आपको कोई त्रुटि मिलती कहते हैं 'write.table' नेस्ट को संभाल सकता है dataframes। मेरा अनुमान है कि कुछ गड़बड़ हो गया है और त्रुटि संदेश में दिया गया '&& ncol (xj)' कोड गैर-मैट्रिक्स को संसाधित करने का प्रयास कर रहा है, इसलिए 'ncolxj) 'वापस' शून्य ', और' आर' नफरत करता है "नल" एक तार्किक ऑपरेशन। –

+0

वैसे भी, हमले की स्पष्ट योजना उम्मीदवार "खराब" तत्वों को हटाने के बाद, 'डीएफ' के एक हिस्से पर 'write.table' को आजमाएं, और देखें कि कौन सा तत्व अपराधी है। –

उत्तर

4

agstudy द्वारा समाधान एक बहुत तेज़ फिक्स प्रदान करता है, लेकिन सरल वैकल्पिक/सामान्य समाधान है जिसके लिए आपको निर्दिष्ट करने की आवश्यकता नहीं है तत्व (रों) अपने data.frame में था (थे) नेस्ट:

निम्नलिखित बिट बस नेस्टेड data.frame dd प्राप्त करने के लिए agstudy's solution से नकल है:

Month=data.frame(Dates= as.Date("2003-02-01") + 1:15, 
       Month=gl(12,2,15)) 
dd <- data.frame(Age=1:15) 
dd$Month <- Month 

आप akhilsbehl'sLinearizeNestedList() उपयोग कर सकते हैं समारोह (जो उपलब्ध here बनाया mrdwab) समतल (या linearize) नेस्टेड स्तरों:

library(devtools) 
source_gist(4205477) #loads the function 

ddf <- LinearizeNestedList(dd, LinearizeDataFrames = TRUE) 
# ddf is now a list with two elements (Age and Month) 

ddf <- LinearizeNestedList(ddf, LinearizeDataFrames = TRUE) 
# ddf is now a list with 3 elements (Age, `Month/Dates` and `Month/Month`) 

ddf <- as.data.frame.list(ddf) 
# transforms the flattened/linearized list into a data.frame 

ddf अब ne बिना एक data.frame है डंक। हालांकि, यह स्तंभ नाम अभी भी आंतरिक संरचना को प्रतिबिंबित है:

names(ddf) 
[1] "Age"   "Month.Dates" "Month.Month" 

आप इस बदलना चाहते हैं (इस मामले में यह अनावश्यक Month.Dates से पहले लिखा है, लगता है उदाहरण के लिए) आप gsub और some regular expression कि मैं कॉपी किया उपयोग कर सकते हैं . से पहले कॉलम नामों में सभी टेक्स्ट को निकालने के लिए सच्चा एप्सकैम्प से।

names(ddf) <- gsub(".*\\.","",names(ddf)) 
names(ddf) 
[1] "Age" "Dates" "Month" 

केवल एक चीज अब छोड़ दिया है हमेशा की तरह data.frame निर्यात किया जाता है:

write.table(ddf, file="test.txt") 
5

एक उदाहरण त्रुटि पुन: पेश करने। मैं एक नेस्टेड data.frame बनाएँ:

write.table(dd) 
Error in if (inherits(X[[j]], "data.frame") && ncol(xj) > 1L) 
    X[[j]] <- as.matrix(X[[j]]) : missing value where TRUE/FALSE needed 

inverstigating के बिना, दूर करने के लिए एक ही विकल्प नेस्टेड data.frame:

write.table(data.frame(subset(dd,select=-c(Month)),unclass(dd$Month))) 

Month=data.frame(Dates= as.Date("2003-02-01") + 1:15, 
       Month=gl(12,2,15)) 
dd <- data.frame(Age=1:15) 
dd$Month <- Month 
str(dd) 
'data.frame': 15 obs. of 2 variables: 
$ Age : int 1 2 3 4 5 6 7 8 9 10 ... 
$ Month:'data.frame': 15 obs. of 2 variables: 
    ..$ Dates: Date, format: "2003-02-02" "2003-02-03" "2003-02-04" ... 
    ..$ Month: Factor w/ 12 levels "1","2","3","4",..: 1 1 2 2 3 3 4 4 5 5 ... 

नहीं मैं इसे बचाने की कोशिश, मैं त्रुटि पुन: पेश

2

वैकल्पिक रूप से, आप "समतल" समारोह jsonlite पैकेज से निर्यात से पहले dataframe समतल इस्तेमाल कर सकते हैं। यह उल्लिखित अन्य कार्यों का एक ही परिणाम प्राप्त करता है और इसे लागू करना बहुत आसान है।

jsonlite::flatten

https://rdrr.io/cran/jsonlite/man/flatten.html

+0

jsonlite :: flatten एक नेस्टेड डेटा फ्रेम flatten वास्तव में अच्छी तरह से काम करता है। लेकिन आपके द्वारा प्रदान किया गया लिंक मर चुका है। – Renhuai

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