我有以下数据框:
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
。
答案 0 :(得分:3)
首先,使用cbind
提供matrix
,而不是data.frame
- 尝试:
df <- data.frame( P1=c(1,1,2,2,3), P2=c(2,3,4,4,4) )
然后使用labels
代替levels
标签,并将levels
设置为1:4
以涵盖df$P1
和{{1}中的所有可能选项}}
df$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