我有以下数据框:
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
。
最佳答案
首先,使用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
和 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
一步处理所有变量:
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
关于r - R中如何将数字转换为因子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21271452/