簡體   English   中英

R:定義數據幀中因子的級別

[英]R: Define levels of a factor in data frame

假設您有一個data.frame其中包含許多不同級別的因素:

V1<-factor(sample(c(1:5,9),100,TRUE))
V2<-factor(sample(c(1:5,9),100,TRUE))
V3<-factor(sample(c(1:5),100,TRUE))
V4<-factor(sample(c(1:5),100,TRUE))
dat<-data.frame(V1,V2,V3,V4)

目標是估計兩個因素的水平頻率差異。 但是,由於級別數不同,基於V1 / V2和V3 / V4的兩個表中的數組不一致,例如:

table(dat$V1)-table(dat$V3)
Error in table(dat$V1) - table(dat$V3) : non-conformable arrays

目標是使V3和V4一致,以便操作有效。 一種選擇是:

dat$V3<-factor(dat$V3,levels=c('1','2','3','4','5','9')

但是,它需要為每個變量設置因子水平,這對許多變量V5,...,Vn來說是不切實際的。 我想

dat[,3:4]<-apply(dat[,3:4],2,factor,levels=c('1','2','3','4','5','9'))

可能更通用的術語,但is.factor(dat$V3)則為FALSE。

編輯:此功能可能完成SimonO101的答案:

correct_factors<-function(df_object,range){

  if(is.data.frame(df_object)==FALSE){stop('Requires data.frame object')}
  levs <- unique( unlist( lapply( df_object[,range[1]:range[2]] , levels ) ) )
  df_object[,range[1]:range[2]] <- 
     data.frame( lapply( df_object[,range[1]:range[2]] , factor , levels = levs ) )
  return(df_object)      

}

試試這個以協調水平......

#  Get vector of all levels that appear in the data.frame
levs <- unique( unlist( lapply( dat , levels ) ) )

#  Set these as the levels for each column    
dat2 <- data.frame( lapply( dat , factor , levels = levs ) )

table(dat2$V1)-table(dat2$V3)
#  1   2   3   4   5   9 
#-15  -5   4   7  -5  14 

暫無
暫無

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

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