[英]How to replace factor levels in multiples columns of a data frame based on the match lookup data frame using 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.