簡體   English   中英

使用apply()函數更新R中數據幀的多列的因子級別

[英]Using apply() function to update the factor levels of multiple columns of a data frame in R

直接問這個問題。 說我有以下數據框:

> head(temp)
  Gender Age Agegroup
2   Male  63      61+
3   Male  60    50-60
4   Male  55    50-60
5   Male  36    30-39
7   Male  39    30-39
8   Male  63      61+

調用摘要函數:

> summary(temp)
    Gender            Age         Agegroup     
 Male  :864692   Min.   :25.00   25-29:0  
 Female:     0   1st Qu.:35.00   30-39:205237  
                 Median :45.00   40-49:235622  
                 Mean   :44.48   50-60:250977  
                 3rd Qu.:54.00   61+  : 68807  
                 Max.   :64.00   

如您所見,女性因子和25-29因子水平的觀測值均為零。 結果,我不需要那些水平。 我使用以下代碼刪除它們:

temp$Gender<-factor(temp$Gender)
temp$Agegroup<-factor(temp$Agegroup)

我的問題是:我將如何使用apply函數之一來執行用於刪除級別的代碼? 看起來像這樣:

# Pseudo code just to illustrate my purpose
temp[,c(1,3)]<-apply(temp[,c(1,3)],FUN=factor)

如果我需要更新數據框的許多列的級別,這將很方便。 謝謝。 讓我知道是否需要進一步說明。

您正在尋找droplevels

以下是一些與您相似的示例數據:

set.seed(1)
mydf <- data.frame(A = factor(rep("M", 5), levels = c("M", "F")),
                   B = sample(20:50, 5, TRUE))
mydf$C <- cut(mydf$B, seq(0, 80, 10))
mydf
#   A  B       C
# 1 M 28 (20,30]
# 2 M 31 (30,40]
# 3 M 37 (30,40]
# 4 M 48 (40,50]
# 5 M 26 (20,30]
summary(mydf)
#  A           B            C    
#  M:5   Min.   :26   (20,30]:2  
#  F:0   1st Qu.:28   (30,40]:2  
#        Median :31   (40,50]:1  
#        Mean   :34   (0,10] :0  
#        3rd Qu.:37   (10,20]:0  
#        Max.   :48   (50,60]:0  
#                     (Other):0

現在,讓我們使用droplevels看看會發生什么:

mydf2 <- droplevels(mydf)
summary(mydf2)
#  A           B            C    
#  M:5   Min.   :26   (20,30]:2  
#        1st Qu.:28   (30,40]:2  
#        Median :31   (40,50]:1  
#        Mean   :34              
#        3rd Qu.:37              
#        Max.   :48         

如果您確實想使用*apply方法,則可以按以下方式使用lapply

mydf3 <- mydf                    ## Create a copy of your original just in case
mydf3[] <- lapply(mydf3, factor)
summary(mydf3)
#  A      B           C    
#  M:5   26:1   (20,30]:2  
#        28:1   (30,40]:2  
#        31:1   (40,50]:1  
#        37:1              
#        48:1                   

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM