r - كيف يمكنني إسقاط مستويات غير مستخدمة من إطار بيانات؟




levels (2)

إضافة إلى إجابة Hong Ooi ، إليك مثال وجدته من R-Bloggers.

# Create some fake data
x <- as.factor(sample(head(colors()),100,replace=TRUE))
levels(x)
x <- x[x!="aliceblue"]
levels(x) # still the same levels
table(x) # even though one level has 0 entries!

The solution is simple: run factor() again:
x <- factor(x)
levels(x)

بالنظر إلى البيانات وهمية التالية:

set.seed(123)
x <- data.frame(let = sample(letters[1:5], 100, replace = T), 
                num = sample(1:10, 100, replace = T))
y <- subset(x, let != 'a')

إنشاء جدول y$let العوائد

a  b  c  d  e 
0 20 21 22 18

لكنني لا أريد أن تظهر بعد الآن. إذا حاولت القيام بذلك:

levels(y$let) <- factor(y$let)

أفسد الترددات ، حيث أن table(y$let) يعطيني

b  d  c  e 
0 20 21 40 

أدرك أنه يمكنني إجراء xtabs(~ y$let, drop.unused.levels = T) على المشكلة ، لكنها لا تعيد تعيين مستويات المتغير في جوهرها (وهو أمر مهم بالنسبة لي ، لأن هذا مهم تغيير مبكر أجريه على مجموعة البيانات التي ستستمر طوال التحليل بأكمله). علاوة على ذلك ، فإن xtabs هي فئة مختلفة عن table ، والتي سوف تعطيني الصداع لاحقًا في المشروع.

والسؤال هو: كيف يمكنني تغيير levels(y$let) تلقائيًا levels(y$let) حتى لا يُظهر المستويات التي تم إسقاطها عند إنشاء المجموعة الفرعية؟ في هذه الحالة ، كيف يمكنني جعلها تظهر [1] "b" "c" "d" "e" ؟


فقط افعل y$let <- factor(y$let) . يعمل factor على متغير عامل موجود على إعادة ضبط المستويات على المستويات الموجودة فقط.







levels