编辑:包括我阅读的文档,我仍然不清楚
我是R的新手并且正在使用预装了mtcars
data.frame
的RStudio。我正在将cyl
变量转换为因子并标记它们。我的代码是:
df <- mtcars
str(df)
df$cyl <- factor(df$cyl, labels = c('Four cylinder', 'Six Cylinder', 'Eight Cylinder'))
str(df)
哪个输出:
> df <- mtcars
> str(df)
'data.frame': 32 obs. of 11 variables:
$ mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
$ cyl : num 6 6 4 6 8 6 8 4 4 6 ...
$ disp: num 160 160 108 258 360 ...
$ hp : num 110 110 93 110 175 105 245 62 95 123 ...
$ drat: num 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
$ wt : num 2.62 2.88 2.32 3.21 3.44 ...
$ qsec: num 16.5 17 18.6 19.4 17 ...
$ vs : num 0 0 1 1 0 1 0 1 1 1 ...
$ am : num 1 1 1 0 0 0 0 0 0 0 ...
$ gear: num 4 4 4 3 3 3 3 4 4 4 ...
$ carb: num 4 4 1 1 2 1 4 2 2 4 ...
> df$cyl <- factor(df$cyl, labels = c('Four cylinder', 'Six Cylinder', 'Eight Cylinder'))
> str(df)
'data.frame': 32 obs. of 11 variables:
$ mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
$ cyl : Factor w/ 3 levels "Four cylinder",..: 2 2 1 2 3 2 3 1 1 2 ...
$ disp: num 160 160 108 258 360 ...
$ hp : num 110 110 93 110 175 105 245 62 95 123 ...
$ drat: num 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
$ wt : num 2.62 2.88 2.32 3.21 3.44 ...
$ qsec: num 16.5 17 18.6 19.4 17 ...
$ vs : num 0 0 1 1 0 1 0 1 1 1 ...
$ am : num 1 1 1 0 0 0 0 0 0 0 ...
$ gear: num 4 4 4 3 3 3 3 4 4 4 ...
$ carb: num 4 4 1 1 2 1 4 2 2 4 ...
我的问题是: factor
部分代码如何正确分配标签(即'Four cylinder'
,在转换后表示为1
正在在原始4
中正确分配了df
s。它只是按升序将标签应用为默认行为吗?如果我有一个字段,例如10个我想要转换为因子的唯一值,该怎么办?如何确定我的标签和替换值是否与正确的原始值相对应?
?factor
州访问的文档:
级别:x可能采用的值(作为字符串)的可选向量。默认值是as.character(x)采用的唯一值集,按x的递增顺序排序。
这似乎表明标签是按原始变量值按升序应用的,但我只是想确保我理解正确。
答案 0 :(得分:1)
它知道在这个例子中,因为它将mtcars $ cyl中的数值转换为字符向量c(4, 6, 8, 6, ...) -> c("4", "6", "8", ...)
,所以通过alphnumerical sort('4'然后'6',然后'8';由于您未在levels
调用中指定factor
,因此df$cyl
与values
相匹配,可以找到存储在levels
中的数值}。标签并没有真正影响因子排序:你可以反过来将标签“六个圆柱”与级别“4”相匹配。
as.numeric(factor(c(4,6,8,6,6,4))) [1] 1 2 3 2 2 1