المقارنات الرقمية مع قيم NA تسبب مجموعات فرعية سيئة في R

StackOverflow https://stackoverflow.com//questions/24020784

سؤال

هل يمكن لأي شخص أن يشرح لي لماذا تنتج التقييمات المنطقية التي تحل زمالة المدمنين المجهولين صفوفًا زائفة في مجموعات فرعية قائمة على مقارنة المتجهات؟على سبيل المثال:

employee <- c("Big Shot CEO", "Programmer","Intern","Guy Who Got Fired Last Week")
salary <-   c(      10000000,        50000,       0,                           NA)
emp_salary <- data.frame(employee,salary)

# how many employees paid over 100K?
nrow(emp_salary[salary>100000,]) # Returns 2 instead of 1 -- why?

emp_salary[salary>100000,]
# returns a bogus row of all NA's (not "Guy Who Got Fired")
#        employee salary
# 1  Big Shot CEO  1e+07
# NA         <NA>   <NA>

salary[salary>100000]
# returns:
# [1] 1e+07    NA

NA > 100000 #returns NA

بالنظر إلى هذا السلوك غير المتوقع، ما هي الطريقة المفضلة لحساب الموظفين الذين يحصلون على أكثر من 100 ألف في المثال أعلاه؟

هل كانت مفيدة؟

المحلول

بادئ ذي بدء، ربما لا ترغب في ذلك cbind() أولاً - سيؤدي ذلك إلى إجبار جميع المتغيرات الخاصة بك على الشخصية.

 emp_salary <- data.frame(employee,salary)

حلان ممكنان:

  • subset يستبعد تلقائيا الحالات التي يكون فيها المعيار NA:

nrow(subset(emp_salary,salary>1e5))
  • عد النتائج مباشرة واستخدامها na.rm=TRUE:

sum(salary>1e5,na.rm=TRUE)

أما بالنسبة للمنطق وراء الصفوف الزائفة:

  • bigsal <- salary>1e5 هو ناقل منطقي يحتوي على NAs، كما يجب (لأنه لا توجد طريقة لمعرفة ما إذا كان NA القيمة تفي بالمعيار أم لا).
  • عند فهرسة صفوف إطار البيانات بمتجه منطقي يحتوي على NAs، ربما يكون هذا هو الجزء الأكثر بروزًا في المستند (من help("[")):

    عند الاستخراج، يختار فهرس "NA" الرقمي أو المنطقي أو الحرفي عنصرًا غير معروف وبالتالي يُرجع "NA" في العنصر المقابل لنتيجة منطقية أو عدد صحيح أو رقمي أو معقد أو حرفي، و"NULL" للقائمة.

(لقد بحثت help("[.data.frame") ولم أتمكن من رؤية أي شيء أكثر فائدة.)

الشيء الذي يجب تذكره هو أنه بمجرد الانتهاء من الفهرسة، لم يعد لدى R أي معرفة بأن المتجه المنطقي تم إنشاؤه من salary العمود، لذلك لا توجد طريقة للقيام بما قد تريده، وهو الاحتفاظ بالقيم الموجودة في الأعمدة الأخرى.إليك إحدى الطرق للتفكير في السلوك الغريب الذي يبدو لملء جميع الأعمدة في ملف NA صف مع NAس:إذا ترك R الصف بالكامل، فإن ذلك يتوافق مع المعيار FALSE.إذا احتفظ بها (وتذكر أنه لا يمكنه الاحتفاظ ببعض الأعمدة وإسقاط الأعمدة الأخرى)، فإن ذلك يتوافق مع المعيار TRUE.إذا كان المعيار لا FALSE ولا TRUE, ، فمن الصعب أن نرى ما هو السلوك الآخر المنطقي ...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top