[英]how do I remove one factor level in R?
我需要從R中的數據框中刪除變量。我的數據包含18個因素的列:
在創建啞變量以說“人X在Y行業工作”之前,我需要刪除因子18。 也就是說,我只需要保留前17個級別(分類級別)
在Stata中刪除該級別將是
drop if rama1 == 99
(rama1是因子列,而99是“未分類”)
然后在Stata中創建虛擬變量(每個行業一個二進制變量),我運行:
quietly tabulate rama1, generate(rama1_)
R中的是:
for(i in unique(data$rama1)) {
data[paste("type", i, sep="")] <- ifelse(data$rama1 == i, 1, 0)
}
有任何想法嗎? 非常歡迎您的幫助
要刪除級別,BondedDust或jlhoward都可以使用。 要創建虛擬變量,將取決於您想要的/如何制定它。
例如,對於刪除的因子,是否要使行顯示為<NA>
或0
。
基數R
要做到這一點,最簡單的方法是使用model.matrix
在基地R.所以建立由BondedDust的例子;
df <- data.frame(x=as.factor(sample(LETTERS[1:5],100, replace=TRUE)), y=1:100)
# remove E and the level
is.na(df$x) <- df$x == "E"
df$x <- factor(df$x)
產生此:
> head(df)
x y
1 D 1
2 C 2
3 A 3
4 <NA> 4
5 D 5
6 A 6
然后,我們可以簡單地運行model.matrix來獲取因子水平的虛擬變量。 默認情況下,它將所有NA更改為0。
> model.matrix(~x, df)
(Intercept) xB xC xD
1 1 0 0 1
2 1 0 1 0
3 1 0 0 0
5 1 0 0 1
6 1 0 0 0
8 1 1 0 0
9 1 0 0 0
11 1 0 0 0
12 1 0 1 0
插入符號
另一種方法是使用插入符號包,當在測試/保持模型中運行這些因素/重新設置時,它可能會給您帶來更多的功能。
它包含為您執行此操作的dummyVars
函數。
> xx <- dummyVars(~x, df)
> predict(xx, df)
x.A x.B x.C x.D
1 0 0 0 1
2 0 0 1 0
3 1 0 0 0
4 NA NA NA NA
5 0 0 0 1
6 1 0 0 0
7 NA NA NA NA
R還具有“刪除”級別(毫不droplevels
稱為droplevels)的droplevels
。 從上下文來看,我猜測Stata的drop
更像R的is.na<-
,因為它似乎是在將該列設置為丟失項。 為了防止R顯示現在的“缺失”電平,您需要首先刪除這些值,然后刪除這些電平。
完全不需要創建多個列,每個“虛擬”都需要一個。 我懷疑在Stata中也不需要它。 我認為這是一種可能會從SAS或SPSS進行的操作。 R中的回歸和表操作將通過單個列適當地完成。
df <- data.frame(x=as.factor(sample(LETTERS[1:5],100, replace=TRUE)), y=1:100)
levels(df$x)
#[1] "A" "B" "C" "D" "E"
is.na(df$x) <- df$x == "E"
lm( y~x, df)
#--------------
Call:
lm(formula = y ~ x, data = df)
Coefficients:
(Intercept) xB xC xD
49.3846 -0.7846 2.9838 2.7692
如果df1$rami
是通過對99
進行測試所建議的數字,那么無論如何它都不是一個因素,並且對級別的討論也沒有密切關系。
擴大我的評論:
set.seed(1)
df <- data.frame(x=as.factor(sample(LETTERS[1:5],10, replace=TRUE)), y=1:10)
levels(df$x)
# [1] "A" "B" "C" "D" "E"
df <- df[df$x!="E",] # remove all rows with df$x=="E"
levels(df$x) # level E remains
# [1] "A" "B" "C" "D" "E"
df$x <- factor(df$x) # get rid of it...
levels(df$x)
# [1] "A" "B" "C" "D"
請注意, as.factor(...)
無效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.