我有一个数据框架df,其中列X有三个不同的变量a, b和c作为字符。例如
df$X <- data.frame(X = c(a,a,a,b,b,c,c,c,c), Y = ....)
我想把它转换成a = 1 b = 2 c = 3作为数字
我第一次尝试
df$X = as.factor(df$X)
transform(df, X = as.numeric(X))
现在我有一个三阶因子a=1 b=2 c=3。然而问题是,我需要列X为数字。如果我尝试
transform(df, X = as.numeric(as.character(X)))
或
transform(df, X = as.numeric(levels(X))[X])
对于所有的输入(a, b, c)我得到NA
我怎么能得到列X与数字1,2,3 ?
@jay的解。首先将字符编码作为一个因素是相当优雅的,因为它可以泛化到任意字符串,而不仅仅是单个字符。
如果代码是单个字符,则有另一种可能的解决方案,即使用内置常量letters
并返回其中的位置:
sapply(df$X, function(x) {which(x == letters)})