【发布时间】:2014-06-06 03:59:32
【问题描述】:
我有一个数据框“棒球”,其中包含一些大学棒球运动员的击球数据。我正在尝试将球员的大学年份(Fr.、So.、Jr.、Sr.)转换为数值(1、2、3、4)。我尝试了几种不同的方法,但似乎都无法正确使用。
这就是我要开始的:
> baseball$Yr.
[1] Jr. Jr. So. Jr. Jr. Fr. Jr. Jr. So. Jr.
[11] Sr. Jr. Sr. So. Jr. Sr. So. Jr.
Levels: Fr. Jr. So. Sr.
1) 首先,我尝试了这个:
> modBaseball = baseball
> levels(modBaseball$Yr.)
[1] "Fr." "Jr." "So." "Sr."
> levels(modBaseball$Yr.) = c(1,3,2,4)
> modBaseball$Yr.
[1] 3 3 2 3 3 1 3 3 2 3 4 3 4 2 3 4 2 3
Levels: 1 3 2 4
> class(modBaseball$Yr.)
[1] "factor"
“modBaseball$Yr。”是正确的,除了类仍然是一个因素,所以我这样做了:
> class(modBaseball$Yr.) = "integer"
> class(modBaseball$Yr.)
[1] "integer"
> modBaseball$Yr.
[1] 2 2 3 2 2 1 2 2 3 2 4 2 4 3 2 4 3 2
attr(,"levels")
[1] "1" "3" "2" "4"
现在,价值观发生了变化!我认为这是因为因素的存储方式以及我输入新级别的顺序。
2) 所以,我又试了一次,但这次我将级别设置为c(1,2,3,4)。正如预期的那样,这些值被错误地分配了。
3) 然后,我做了一些研究,并尝试先手动创建因子:
> modBaseball = baseball
> f = factor(modBaseball$Yr., levels=c(1,2,3,4), ordered=TRUE)
> f
[1] <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
[9] <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
[17] <NA> <NA>
Levels: 1 < 2 < 3 < 4
现在数据都是 NA 的!我究竟做错了什么?我希望因子函数将级别 1、2、3、4 分配给有序的值列表,但显然,它不是这样工作的。
感谢您的帮助。
【问题讨论】:
-
你试过在任何地方使用
as.numeric()吗? -
因子的水平总是字符值。
-
从技术上讲,它们是的整数值。这是一个因素的重点。我建议阅读...尝试
?factor! :-)
标签: r