2014-01-21 74 views
2

我有以下數據框:如何從數字轉換爲因素中的R

df_raw <- cbind(P1=c(1,1,2,2,3), P2=c(2,3,4,4,4)) 

我如何可以將這些數字轉換的因素有不同的層次,讓我有類似:

head(df_factor) 
    P1 P2 
1 "alpha" "beta" 
2 "alpha" "gamma" 
3 "beta" "delta" 

即其中1被轉換爲「alpha」,2轉換爲「beta」,3轉換爲「gamma」等等。我知道我可以使用ifelse聲明,但這比僅僅轉換因子水平的方式更繁瑣。

如果我嘗試例如:

df$P1 <- factor(df$P1, levels=c("alpha","beta","gamma")) 

我得到NAs的值。

回答

3

首先,利用cbind給人以matrix,不是data.frame - 嘗試:

df <- data.frame(P1=c(1,1,2,2,3), P2=c(2,3,4,4,4)) 

然後使用labels爲標籤,而不是levels,並設置levels1:4以彌補df$P1df$P2所有可能的選項

df$P1 <- factor(df$P1, levels=1:4, labels=c("alpha","beta","gamma","delta")) 
df 

#  P1 P2 
#1 alpha 2 
#2 alpha 3 
#3 beta 4 
#4 beta 4 
#5 gamma 4 

df$P1 
#[1] alpha alpha beta beta gamma 
#Levels: alpha beta gamma delta 

您可以使用lapply來解決所有問題一步中的變量:

df <- data.frame(P1=c(1,1,2,2,3), P2=c(2,3,4,4,4)) 
data.frame(lapply(df,factor,levels=1:4,labels=c("alpha","beta","gamma","delta"))) 

#  P1 P2 
#1 alpha beta 
#2 alpha gamma 
#3 beta delta 
#4 beta delta 
#5 gamma delta