2

我有以下数据框:

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了价值观。

4

1 回答 1

3

首先,使用cbind给出 a 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
于 2014-01-22T00:23:02.187 回答