এনএ এর নির্দিষ্ট কলামযুক্ত সারি ছাড়ুন


129

আমি NAএকটি ডেটা ফ্রেমে মানগুলি কীভাবে বাদ দিতে পারি তা জানতে চাই , তবে কেবলমাত্র কয়েকটি কলামে আমি আগ্রহী।

উদাহরণ স্বরূপ,

DF <- data.frame(x = c(1, 2, 3), y = c(0, 10, NA), z=c(NA, 33, 22))

কিন্তু আমি শুধুমাত্র বর্জন করতে ডেটা যেখানে চান yহয় NA, অতএব ফলাফলের হওয়া উচিত

  x  y  z
1 1  0 NA
2 2 10 33

na.omitসমস্ত সারি মুছে ফেলা মনে হয় NA

এই সহজ প্রশ্ন থেকে কেউ আমাকে সাহায্য করতে পারে?

তবে এখন যদি আমি প্রশ্নটি পরিবর্তন করি তবে:

DF <- data.frame(x = c(1, 2, 3,NA), y = c(1,0, 10, NA), z=c(43,NA, 33, NA))

যদি আমি কেবল বাদ দিতে চাই x=naবা z=na, আমি কোথায় |ফাংশনটি রাখতে পারি?

উত্তর:


79

আপনি এই complete.casesফাংশনটি ব্যবহার করতে পারেন এবং এটিকে একটি ফাংশনে রেখেছিলেন:

DF <- data.frame(x = c(1, 2, 3), y = c(0, 10, NA), z=c(NA, 33, 22))

completeFun <- function(data, desiredCols) {
  completeVec <- complete.cases(data[, desiredCols])
  return(data[completeVec, ])
}

completeFun(DF, "y")
#   x  y  z
# 1 1  0 NA
# 2 2 10 33

completeFun(DF, c("y", "z"))
#   x  y  z
# 2 2 10 33

সম্পাদনা: কেবলমাত্র ছাড়াই সারিগুলি প্রেরণ করুনNA

আপনি যদি NAকোনও কলামে কমপক্ষে একটি দিয়ে সমস্ত সারি মুছে ফেলতে চান তবে কেবলমাত্র complete.casesসরাসরি ফাংশনটি ব্যবহার করুন :

DF[complete.cases(DF), ]
#   x  y  z
# 2 2 10 33

অথবা যদি completeFunইতিমধ্যে আপনার কর্মপ্রবাহে অন্তর্ভুক্ত থাকে;)

completeFun(DF, names(DF))

আপনি কি আপনার পদ্ধতির লোভী করতে পারেন? এমন সমস্ত কলাম নিন যেখানে মোটামুটি এনএ নেই।
লিও লোপোল্ড হার্টজ 준영

1
তুমি বোঝাতে চাও শুধু কোন এস ছাড়াই সারি ফিরবে NA? পছন্দ completeFun(DF, names(DF))?
বেনবার্নস

সঠিক! দয়া করে এটি আপনার উত্তরে যুক্ত করার বিষয়টি বিবেচনা করুন কারণ এটি এখানে একটি সাধারণ প্রয়োজন। - - আমি মনে করি গলির উত্তরটি আপনার হিসাবে প্রসারিত হতে পারে না। আপনার ফাংশন পদ্ধতির দুর্দান্ত!
লিও লোপোল্ড হার্টজ 준영

1
সম্পন্ন! টিপটির জন্য থ্যাক্স @ লোওলোপল্ড হার্টজ 준영
বেনবার্নস

192

ব্যবহার is.na

DF <- data.frame(x = c(1, 2, 3), y = c(0, 10, NA), z=c(NA, 33, 22))
DF[!is.na(DF$y),]

1
আপনি কীভাবে ডেটা সেটের সমস্ত কলামে এই পদ্ধতির লোভের সাথে প্রয়োগ করবেন? কলামের মান যদি হয় তবে এএন এড়িয়ে যান। সুতরাং আপনার ডেটা সেট আউটপুট কেবল দ্বিতীয় কলাম।
লিও লোপল্ড হার্টজ 준영

2
na.omitযে কোনও কলামে এনএ সহ সমস্ত সারি লোভজনকভাবে মুছে ফেলার জন্য ব্যবহার করুনna.omit(DF)
এম ভাইকিং

69

হ্যাডলির tidyrসবেমাত্র এই আশ্চর্যজনক ফাংশনটি পেয়েছেdrop_na

library(tidyr)
DF %>% drop_na(y)
  x  y  z
1 1  0 NA
2 2 10 33

30

'সাবসেট' ব্যবহার করুন

DF <- data.frame(x = c(1, 2, 3), y = c(0, 10, NA), z=c(NA, 33, 22))
subset(DF, !is.na(y))

9

এটা ব্যবহার করা সম্ভব na.omitজন্য data.table:

na.omit(data, cols = c("x", "z"))

3
cols=যুক্তি পাওয়া যায় data.table::na.omitগ্রন্থাগার। বেস না stats::na.omit
এম ভাইকিং


2

দুটি নির্দিষ্ট কলামের মধ্যে যদি দুটি থাকে তবে সারি ছাড়ুন <NA>

DF[!is.na(DF$x)&!is.na(DF$z),]

1

শুধু এটি চেষ্টা করুন:

DF %>% t %>% na.omit %>% t

এটি ডেটা ফ্রেম স্থানান্তর করে এবং নাল সারি বাদ দেয় যা স্থানান্তরের আগে 'কলাম' ছিল এবং তারপরে আপনি এটি আবার স্থানান্তরিত করতে পারেন।


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