একটি কলামে NA মানগুলির সংখ্যা নির্ধারণ করুন


142

আমি NAএকটি ডেটা ফ্রেম কলামে মানগুলির সংখ্যা গণনা করতে চাই । বলুন আমার ডেটা ফ্রেমটি কল করা হয়েছে dfএবং আমি যে কলামটির কথা বিবেচনা করছি তার নাম col। আমি যেভাবে সামনে এসেছি তা নিম্নলিখিত:

sapply(df$col, function(x) sum(length(which(is.na(x)))))  

এটি করার জন্য এটি কি ভাল / সবচেয়ে কার্যকর উপায়?

উত্তর:


316

আপনি সমস্যার অতিরিক্ত চিন্তা করছেন:

sum(is.na(df$col))

এই জন্য আপনাকে ধন্যবাদ. এটি একটু বিস্তৃত করতে। স্বেচ্ছাসেবীর পরিমাণ গণনায় value, অন্য কোনও NAবুলিয়ান ফাংশন লিখে is.valueএবং তারপরে sum(is.value(df$col))যাওয়ার উপায় ব্যবহার করে বা এর জন্য আরও সংক্ষিপ্ত প্রত্যক্ষ বাক্য গঠন আছে?
ব্যবহারকারী 3274289

3
জিজ্ঞাসা খুব দ্রুত ছিল। sum(df$col==value,na.rm=FALSE)কৌতুক করে
ব্যবহারকারী 3274289

4
@ ব্যবহারকারী 3274289: যদিও আপনি সাধারণত চাইবেন na.rm=TRUE, কারণ অন্যথায় যদি df$colএনএ থাকে তবে sumফিরে আসবে NA
jbaums

1
কখনও কখনও আমি ভাবি যে আমি বেশি চিন্তাভাবনা করছি, যতক্ষণ না এই উত্তর পেয়েছি ... ভাল, এটা সত্য ...
রুগাল

দুঃখিত তবে এটি আমার পক্ষে কাজ করে না। আমি এই সতর্কতা সতর্কতা বার্তাটি পেয়েছি: In.na (নাম $ wd): is.na () 'NULL' টাইপের নন (তালিকা বা ভেক্টর) এর জন্য প্রয়োগ হয়েছে, এবং গণনাটি কেবল শূন্য।
হারমান টুথ্রোট

77

আপনি যদি NAকোনও ডেটাফ্রেমে প্রতিটি কলামের জন্য গণনা খুঁজছেন তবে:

na_count <-sapply(x, function(y) sum(length(which(is.na(y)))))

প্রতিটি কলামের গণনা সহ আপনাকে একটি তালিকা দেওয়া উচিত।

na_count <- data.frame(na_count)

ডাটাফ্রেমে যেমন ডাটা খুব সুন্দরভাবে আউটপুট করা উচিত:

----------------------
| row.names | na_count
------------------------
| column_1  | count

1
একটি কলাম হিসাবে সারি নাম অন্তর্ভুক্ত করতে, চালান na_count$name<-rownames(na_count)
ম্যাট

6
na_count <-sapply(x, function(y) sum(is.na(y)))একটি সংক্ষিপ্ত বিকল্প।
ভিনসেন্ট বনহোমে

1
আমার পক্ষে কাজ করেনি :( এটিকে এটিকে পরিবর্তন করতে হয়েছিল: na_count <- প্রয়োগ করুন (x, ফাংশন (y) যোগফল (is.na (y)), MARGIN = 2)
অ্যাঞ্জেল গার্সিয়া ক্যাম্পোস

আমি মনে করি না যে আমাদের যোগফল এবং দৈর্ঘ্য ফাংশন উভয়ই ব্যবহার করতে হবে (প্রথম নাম_অ্যাসাইন্টমেন্টে)? মাত্র দৈর্ঘ্য পর্যাপ্ত হওয়া উচিত।
ইয়াণ্ডলে


18

আপনি যদি পুরো ডেটাফ্রেমে এনএর সংখ্যা গণনা করতে চান তবে আপনি এটিও ব্যবহার করতে পারেন

sum(is.na(df))

13

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


2
ওয়ার্থ লক্ষ করেন, summaryআউটপুট যখন একটি একক কলাম ব্যবহৃত, ব্যবহারযোগ্য থাকাকালীন একটি সম্পূর্ণ তথ্য ফ্রেম থেকে তার আউটপুট চরিত্র এবং গন্য যদি আপনি তাদের পরে প্রয়োজন বের করে আনতে কঠিন। দেখুন c(summary(mtcars))
ধনী স্ক্রিভেন

9

ডেটাফ্রেমের প্রতিটি কলামে নালার সংখ্যা গণনা করার একটি স্বাচ্ছন্দ্যময় উপায়:

library(tidyverse)
library(purrr)

df %>%
    map_df(function(x) sum(is.na(x))) %>%
    gather(feature, num_nulls) %>%
    print(n = 100)

3
আপনার এমনকি পিউরার দরকার নেই:df %>% summarise_all(funs(sum(is.na(.))))
ডেভিড ব্রুস বোরেস্টাইন

আপনি যদি আমার মতো অলস হন তবে আপনি @ আবি কে এর উত্তরে কিছুটা কম সংক্ষিপ্ত df %>% map_df(~sum(is.na(.)))purrr বাক্য গঠনে যেমন লিখতে পারেন : বা dplyr ছাড়াইmap_df(~sum(is.na(df)))
Agile বিন বিন

7

এই ফর্মটি কেভিন ওগোরোসের একটি থেকে কিছুটা পরিবর্তিত হয়েছে:

na_count <-function (x) sapply(x, function(y) sum(is.na(y)))

এনএর নামকরণকৃত অ্যারে হিসাবে গণনা করে


তালিকা হিসাবে ফলাফল পেতে:na_count <-function (x) lapply(x, function(y) sum(is.na(y)))
hute37

6

একটি পেতে একটি দ্রুত এবং সহজ Tidyverse সমাধান NAসব কলাম গণনা ব্যবহার করা summarise_all()যা আমি মনে করি অনেক সহজ করে তোলে ব্যবহার না করে সমাধান পড়তে purrrবাsapply

library(tidyverse)
# Example data
df <- tibble(col1 = c(1, 2, 3, NA), 
             col2 = c(NA, NA, "a", "b"))

df %>% summarise_all(~ sum(is.na(.)))
#> # A tibble: 1 x 2
#>    col1  col2
#>   <int> <int>
#> 1     1     2


3

ব্যবহারকারী আরআরএসের উত্তরটি সঠিক তবে এটি আপনাকে কেবলমাত্র ফ্রেমের নির্দিষ্ট কলামে এনএ মানগুলির সংখ্যাটি বলে দেয় যে আপনি পুরো ডেটা ফ্রেমের জন্য এনএ মানগুলির সংখ্যা পেতে উত্তীর্ণ হচ্ছেন:

apply(<name of dataFrame>, 2<for getting column stats>, function(x) {sum(is.na(x))})

এই কৌশলটি করে


কিছু টাইপস রয়েছে যা এই কোডটিকে অ-কার্যক্ষম করে তোলে। এটা চেষ্টা কর; apply(df, 2, function(x) sum(is.na(x)))
ব্যবহারকারী 3495945

3

আমি স্থানীয় ডিরেক্টরি থেকে একটি সিএসভি ফাইল পড়েছি । নিম্নলিখিত কোডটি আমার পক্ষে কাজ করে।

# to get number of which contains na
sum(is.na(df[, c(columnName)]) # to get number of na row

# to get number of which not contains na
sum(!is.na(df[, c(columnName)]) 

#here columnName is your desire column name

2

Hute37 এর উত্তর অনুরূপ কিন্তু purrrপ্যাকেজ ব্যবহার । আমি মনে করি এই পরিপাটি পদ্ধতিটি অ্যাবিকের প্রস্তাবিত উত্তরের চেয়ে সহজ।

library(purrr)
map_dbl(df, ~sum(is.na(.)))

দ্রষ্টব্য: টিলড ( ~) একটি বেনামী ফাংশন তৈরি করে। এবং '.' বেনামে ফাংশনটির জন্য ইনপুট বোঝায়, এক্ষেত্রে ডেটা.ফ্রেম df



0
sapply(name of the data, function(x) sum(is.na(x)))

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