সতর্কতা বার্তা: `…`: অবৈধ ফ্যাক্টর স্তর, এনএ উত্পন্ন


134

আমি কেন এই সতর্কতা বার্তা পেয়েছি তা বুঝতে পারছি না।

> 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
@ ডেভিড কেন আর এটিকে ফ্যাক্টরে রূপান্তরিত করে?
কান্নার কে কে

1
কারণ এটি data.frame()ফাংশনে ডিফল্ট সেটিংস (এবং এটি ডিফল্ট কারণ বেশিরভাগ ব্যবহারকারীই সময়ের সিংহভাগই চান)।
ডেভিড

46

আপনি যদি সরাসরি সিএসভি ফাইল থেকে পড়েন তবে এটি করুন।

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

স্ট্রিংএএসএফ্যাক্টররা একটি ত্রুটি নিক্ষেপ করছে: অব্যবহৃত আর্গুমেন্ট (স্ট্রিংএএসএফ্যাক্টর = ফলস)
কলিবান

1
stringsAsFactors- stringsবহুবচনের (@ কলাইবান) হওয়া দরকার
ক্যাম্পেটারসন

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প্যাকেজে চলে এসেছি ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.