ডেটা ফ্রেমের একটি নির্বাচিত কলামে NA (নিখোঁজ) মানযুক্ত সারিগুলির উপসেট


96

আমাদের একটি সিএসভি ফাইল থেকে একটি ডেটা ফ্রেম রয়েছে। ডেটা ফ্রেমের DFকলামগুলিতে পর্যবেক্ষণকৃত মানগুলি এবং একটি কলাম ( VaR2) থাকে যেখানে তারিখটি পরিমাপ করা হয়েছিল contains তারিখটি রেকর্ড করা না থাকলে, CSV ফাইলে মূল্য NAঅনুপস্থিত ডাটা থাকার জন্য রয়েছে ।

Var1  Var2 
10   2010/01/01
20   NA
30   2010/03/01

আমরা একটি নতুন ডেটা ফ্রেম সংজ্ঞায়িত করতে সাবসেট কমান্ডটি ব্যবহার করতে চাই new_DFযেমন এটিতে কেবল সারি রয়েছে NA'যা কলাম ( VaR2) থেকে একটি মান রয়েছে । প্রদত্ত উদাহরণে কেবলমাত্র সারি 2 নতুনতে অন্তর্ভুক্ত থাকবে DF

আদেশ

new_DF<-subset(DF,DF$Var2=="NA") 

কাজ করে না, ফলাফল ডেটা ফ্রেমের কোনও সারি এন্ট্রি নেই।

মূল CSV ফাইল মান যদি NAসঙ্গে বিনিময় হয় NULL, একই কমান্ড কাঙ্ক্ষিত ফলাফল উত্পাদন করে: new_DF<-subset(DF,DF$Var2=="NULL")

আমি এই পদ্ধতিটি কীভাবে কাজ করতে পারি, যদি অক্ষরের স্ট্রিংয়ের NAজন্য মূল সিএসভি ফাইলে মান সরবরাহ করা হয়?

উত্তর:


149

অনুপস্থিত মানগুলির পরীক্ষার জন্য কখনও == 'এনএ' ব্যবহার করবেন না। is.na()পরিবর্তে ব্যবহার করুন। এটি করা উচিত:

new_DF <- DF[rowSums(is.na(DF)) > 0,]

বা যদি আপনি কোনও নির্দিষ্ট কলামটি পরীক্ষা করতে চান তবে আপনি এটি ব্যবহার করতে পারেন

new_DF <- DF[is.na(DF$Var),]

আপনার যদি এনএ অক্ষরের মান থাকে তবে প্রথমে রান করুন

Df[Df=='NA'] <- NA

অনুপস্থিত মানগুলির সাথে তাদের প্রতিস্থাপন করতে।


4
আপনার দ্রুত উত্তরের জন্য ধন্যবাদ (এটি দ্রুত ছিল)! প্রকৃতপক্ষে, ডেটা সিএসভি-বিতরণের কারণে, 'এনএ' অক্ষর মান এবং আপনার দ্বিতীয় বিবৃতিটি খুব কার্যকর হতে পারে। আপনি কি আপনার প্রথম বিবৃতিটি পরিষ্কার করতে পারেন? আমার জন্য সারিসামস () ব্যবহার পরিষ্কার নয়, যেহেতু আমি কেবলমাত্র একটি নির্দিষ্ট কলাম পরীক্ষা করব (প্রচুর কলাম রয়েছে)। যদি সেই নির্দিষ্ট কলামটিতে (উদাহরণস্বরূপ এটি কলাম ভার 2 হবে) সেখানে একটি 'এনএ' অক্ষরযুক্ত স্ট্রিং থাকে (আমি এটি আপনার দ্বিতীয় বিবৃতি দিয়ে প্রতিস্থাপন করব), তবে আমি নতুন তথ্য ফ্রেমের অংশ হতে পুরো সারিটি বেছে নিতে চাই ।
জন

@ জন: আপডেট হয়েছে। আপনার পয়েন্টটি is.na ব্যবহার করা হয়, আমি ভুল ব্যাখ্যা করেছি যে আপনি সমস্ত ভেরিয়েবলগুলি পরীক্ষা করতে চেয়েছিলেন।
জোরিস মেয়েস

4
এটি কি হওয়া উচিত new_DF <- DF[is.na(DF$Var),], এর (পরে কোনও অতিরিক্ত বন্ধনী উপস্থিত হবে DF[?
প্যাট্রিকটি

39

এনএ আর এর একটি বিশেষ মান, "এনএ" স্ট্রিংয়ের সাথে এনএ মানটি মিশ্রিত করবেন না। যেভাবে ডেটা আমদানি করা হয়েছিল তার উপর নির্ভর করে আপনার "এনএ" এবং "এনএইউএল" কোষগুলি বিভিন্ন ধরণের হতে পারে (ডিফল্ট আচরণটি "এনএ" স্ট্রিংগুলিকে এনএ মানগুলিতে রূপান্তর করতে পারে এবং "নুল" স্ট্রিংগুলি যেমন হয় তেমন)।

Read.table () বা read.csv () ব্যবহার করে, পরিষ্কার ডেটা আমদানি করতে আপনার "na.strings" যুক্তিটি বিবেচনা করা উচিত এবং সর্বদা সত্যিকারের আর এন এ মানগুলির সাথে কাজ করা উচিত।

উদাহরণস্বরূপ, "NULL" এবং "NA" কোষ উভয় ক্ষেত্রেই কাজ করা:

DF <- read.csv("file.csv", na.strings=c("NA", "NULL"))
new_DF <- subset(DF, is.na(DF$Var2))

4
আপনার উত্তরের জন্য ধন্যবাদ. আমি যদি এটি সঠিকভাবে বুঝতে পারি তবে প্রথম বিবৃতিটি ডিএফ [ডিএফ == 'এনএ'] হিসাবে << জোরিসের উদাহরণে একই করবে? এর পরে (ছোট) পার্থক্যটি হ'ল এটি শুরুতে সরাসরি আপনার স্টেটমেন্টে করা হয়, যখন ডেটা ফ্রেম তৈরি হয় (এটি একটি খুব পরিষ্কার প্রোগ্রামিং পদ্ধতি এবং তাই আমি এটি পছন্দ করি)।
জন

হুবহু জোরিস ম্যানুয়ালি এনএ মান দ্বারা "এনএ" স্ট্রিংগুলি প্রতিস্থাপনের পরামর্শ দিয়েছিল, এখানে আমি একই উদ্দেশ্য অর্জনের জন্য কেবল "না.স্ট্রিংস" পঠনযোগ্য টেবিলের বৈশিষ্ট্যটি ব্যবহার করার পরামর্শ দিই।
মেরসাইল

জোরিসের উত্তরটি হ'ল এই কৃতিত্ব অর্জন করার "পছন্দসই" উপায় (যদি আপনি কোনও স্ক্রিপ্টে এটি লিখছেন)। দেখুন: স্ট্যাকওভারফ্লো.com
জোনাথন

@ জোনাথন: এখানে দুটি স্বতন্ত্র ধারণা, আপনি যে বিষয়টি উদ্ধৃত করেছেন সেটিতে "[" "" উপসেট "এ অগ্রাধিকার দেওয়া উচিত, তবে আমরা পঠনযোগ্য টেবিলে" না.স্ট্রিংস "যুক্তি সম্পর্কে বলছিলাম,) আমার সাবসেটটি কেবল এখানে দেখার জন্য ছিল ফলাফল.
1313

34

complete.casesTRUEএকটি সারিতে সমস্ত মান হয় না যখন দেয়NA

DF[!complete.cases(DF), ]

13
new_data <- data %>% filter_all(any_vars(is.na(.))) 

এটিতে একটি নতুন ডেটা ফ্রেম তৈরি করা উচিত (new_dataএটিতে কেবল হারিয়ে যাওয়া মানগুলির সাথে ।

আপনার পরে যে মূল্যবোধগুলি হ্রাস হতে পারে তার ট্র্যাক রাখতে সর্বোত্তম কাজ করে কারণ তাদের কিছু কলাম অনুপস্থিত পর্যবেক্ষণ (এনএ) ছিল।


3

এটি পরিবর্তন করার চেষ্টা করুন:

new_DF<-dplyr::filter(DF,is.na(Var2)) 

আপনি ব্যাখ্যা করতে পারেন কেন এটি কাজ করে, এটি কী করে ইত্যাদি?
সিসিল্ক

new_DF <-dplyr :: ফিল্টার (DF, is.na (Var2)) এটি মূলত dplyr প্যাকেজের ফিল্টার ফাংশন ব্যবহার করে এবং ভার2 কলামে এমন কোনও পর্যবেক্ষণ ফিল্টার করে যা শর্তটি পূরণ করে I.na অর্থাৎ তারা এনএ সহ সমস্ত পর্যবেক্ষণ বাছাই করে
drhnes

4
আরও সুন্দরভাবে DF %>% filter(is.na(Var2))পরে হিসাবে প্রকাশ করা library(dplyr)
জো

-1

এনএ ডেটা সহ সমস্ত সারি মুদ্রণ করে:

tmp <- data.frame(c(1,2,3),c(4,NA,5));
tmp[round(which(is.na(tmp))/ncol(tmp)),]

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