المقارنات الرقمية مع قيم NA تسبب مجموعات فرعية سيئة في R
-
21-12-2019 - |
سؤال
هل يمكن لأي شخص أن يشرح لي لماذا تنتج التقييمات المنطقية التي تحل زمالة المدمنين المجهولين صفوفًا زائفة في مجموعات فرعية قائمة على مقارنة المتجهات؟على سبيل المثال:
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
هو ناقل منطقي يحتوي علىNA
s، كما يجب (لأنه لا توجد طريقة لمعرفة ما إذا كانNA
القيمة تفي بالمعيار أم لا).- عند فهرسة صفوف إطار البيانات بمتجه منطقي يحتوي على
NA
s، ربما يكون هذا هو الجزء الأكثر بروزًا في المستند (منhelp("[")
):عند الاستخراج، يختار فهرس "NA" الرقمي أو المنطقي أو الحرفي عنصرًا غير معروف وبالتالي يُرجع "NA" في العنصر المقابل لنتيجة منطقية أو عدد صحيح أو رقمي أو معقد أو حرفي، و"NULL" للقائمة.
help("[.data.frame")
ولم أتمكن من رؤية أي شيء أكثر فائدة.)
الشيء الذي يجب تذكره هو أنه بمجرد الانتهاء من الفهرسة، لم يعد لدى R أي معرفة بأن المتجه المنطقي تم إنشاؤه من salary
العمود، لذلك لا توجد طريقة للقيام بما قد تريده، وهو الاحتفاظ بالقيم الموجودة في الأعمدة الأخرى.إليك إحدى الطرق للتفكير في السلوك الغريب الذي يبدو لملء جميع الأعمدة في ملف NA
صف مع NA
س:إذا ترك R الصف بالكامل، فإن ذلك يتوافق مع المعيار FALSE
.إذا احتفظ بها (وتذكر أنه لا يمكنه الاحتفاظ ببعض الأعمدة وإسقاط الأعمدة الأخرى)، فإن ذلك يتوافق مع المعيار TRUE
.إذا كان المعيار لا FALSE
ولا TRUE
, ، فمن الصعب أن نرى ما هو السلوك الآخر المنطقي ...