चेतावनी संदेश: `…` में: अमान्य कारक स्तर, NA उत्पन्न


135

मुझे समझ नहीं आ रहा है कि मुझे यह चेतावनी संदेश क्यों मिला है।

> fixed <- data.frame("Type" = character(3), "Amount" = numeric(3))
> fixed[1, ] <- c("lunch", 100)
Warning message:
In `[<-.factor`(`*tmp*`, iseq, value = "lunch") :
  invalid factor level, NA generated
> fixed
  Type Amount
1 <NA>    100
2           0
3           0

जवाबों:


216

चेतावनी संदेश है क्योंकि आपके "प्रकार" चर को एक कारक बनाया गया था और "दोपहर का भोजन" एक परिभाषित स्तर नहीं था। stringsAsFactors = FALSE"टाइप" को एक वर्ण होने के लिए बाध्य करने के लिए अपने डेटा फ़्रेम को बनाते समय ध्वज का उपयोग करें ।

> fixed <- data.frame("Type" = character(3), "Amount" = numeric(3))
> str(fixed)
'data.frame':   3 obs. of  2 variables:
 $ Type  : Factor w/ 1 level "": NA 1 1
 $ Amount: chr  "100" "0" "0"
> 
> fixed <- data.frame("Type" = character(3), "Amount" = numeric(3),stringsAsFactors=FALSE)
> fixed[1, ] <- c("lunch", 100)
> str(fixed)
'data.frame':   3 obs. of  2 variables:
 $ Type  : chr  "lunch" "" ""
 $ Amount: chr  "100" "0" "0"

1
@ डेविड क्यों R इसे फैक्टर में परिवर्तित करता है?
कन्नारके

1
क्योंकि यह data.frame()फ़ंक्शन में डिफ़ॉल्ट सेटिंग है (और यह डिफ़ॉल्ट है क्योंकि यही वह है जो अधिकांश उपयोगकर्ता समय के विशाल बहुमत चाहते हैं)।
डेविड

46

अगर आप सीधे CSV फाइल से पढ़ रहे हैं तो इस तरह से करें।

myDataFrame <- read.csv("path/to/file.csv", header = TRUE, stringsAsFactors = FALSE)

stringAsFactors एक त्रुटि फेंक रहा है: अप्रयुक्त तर्क (stringAsFactors = FALSE)
कोलिबन

1
stringsAsFactors- stringsबहुवचन की जरूरत है (@Coliban)
डेम्पर्टेरसन

24

यहाँ एक लचीला दृष्टिकोण है , इसका उपयोग सभी मामलों में किया जा सकता है, विशेष रूप से:

  1. केवल एक कॉलम को प्रभावित करने के लिए , या
  2. को dataframeपिछले ऑपरेशनों को लागू करने से प्राप्त किया गया है (उदाहरण के लिए तुरंत फ़ाइल नहीं खोलना , या एक नया डेटा फ्रेम बनाना)।

सबसे पहले, फंक्शन का उपयोग करके एक स्ट्रिंग को अ-फैक्टराइज़ करेंas.character , और, फिर, (या बस ) फंक्शन के साथ री-फैक्टराइज़ करें :as.factorfactor

fixed <- data.frame("Type" = character(3), "Amount" = numeric(3))

# Un-factorize (as.numeric can be use for numeric values)
#              (as.vector  can be use for objects - not tested)
fixed$Type <- as.character(fixed$Type)
fixed[1, ] <- c("lunch", 100)

# Re-factorize with the as.factor function or simple factor(fixed$Type)
fixed$Type <- as.factor(fixed$Type)

6

इसे ठीक करने का सबसे आसान तरीका अपने कॉलम में एक नया कारक जोड़ना है। आपके पास कितने कारक हैं यह निर्धारित करने के लिए स्तर फ़ंक्शन का उपयोग करें और फिर एक नया कारक जोड़ें।

    > levels(data$Fireplace.Qu)
    [1] "Ex" "Fa" "Gd" "Po" "TA"
    > levels(data$Fireplace.Qu) = c("Ex", "Fa", "Gd", "Po", "TA", "None")
    [1] "Ex"   "Fa"   "Gd"   "Po"   " TA"  "None"

0

मुझे इसी तरह का मुद्दा मिला है ।xlsx फ़ाइल से कौन सा डेटा पुनर्प्राप्त किया गया है। दुर्भाग्य से, मुझे यहाँ उचित उत्तर नहीं मिला। मैंने इसे अपने दम पर dplyr के रूप में नीचे संभाला है जो दूसरों की मदद कर सकता है:

#install.packages("xlsx")
library(xlsx)
extracted_df <- read.xlsx("test.xlsx", sheetName='Sheet1', stringsAsFactors=FALSE)
# Replace all NAs in a data frame with "G" character
extracted_df[is.na(extracted_df)] <- "G"

हालाँकि, मैं इसे उस readxlपैकेज के साथ नहीं संभाल सका जिसके समान पैरामीटर नहीं है stringsAsFactors। इस कारण से, मैं xlsxपैकेज में चला गया हूं ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.