当我练习状态数据集时,
我看到这种方式来显示水平:
myState <-as.data.frame(cbind(state.x77,region=state.region))
myState <- cbind(myState,regionName=levels(state.region)[state.region])
因此实际的regionname将被绑定,但在这里我不知道如何解释这里的levels(state.region)[state.region]
。
我不知道为什么levels(state.region)[state.region]
会在这里返回长度为50的字符(向量?)。
最初我认为它可以通过循环完成,抛出索引,然后返回正确的regionname。但突然之间,抛出变量名称就会完美地完成它,所以我只是想知道里面发生了什么。
我知道levels(state.region)[3]
会显示state.region
因素中的第三个等级,这有助于解释数字何时被因素本身取代?
我还试图搜索之前是否询问过但是看不到类似的东西,或者我没有得到正确的关键字。
非常感谢任何帮助
答案 0 :(得分:2)
让我们通过检查事情得到这个:
第一个state.region是一个因素,让我们看看它:
> dput(state.region)
structure(c(2L, 4L, 4L, 2L, 4L, 4L, 1L, 2L, 2L, 2L, 4L, 4L, 3L,
3L, 3L, 3L, 2L, 2L, 1L, 2L, 1L, 3L, 3L, 2L, 3L, 4L, 3L, 4L, 1L,
1L, 4L, 1L, 2L, 3L, 3L, 2L, 4L, 1L, 1L, 2L, 3L, 2L, 2L, 4L, 1L,
2L, 4L, 2L, 3L, 4L), .Label = c("Northeast", "South", "North Central",
"West"), class = "factor")
调用levels
为我们提供了因子标签的字符向量:
> dput(levels(state.region))
c("Northeast", "South", "North Central", "West")
有趣的是当你将因子作为这个角色向量的选择器时,最简单的可视化方法是在因子上调用as.integer:
> dput(as.integer(state.region))
c(2L, 4L, 4L, 2L, 4L, 4L, 1L, 2L, 2L, 2L, 4L, 4L, 3L, 3L, 3L,
3L, 2L, 2L, 1L, 2L, 1L, 3L, 3L, 2L, 3L, 4L, 3L, 4L, 1L, 1L, 4L,
1L, 2L, 3L, 3L, 2L, 4L, 1L, 1L, 2L, 3L, 2L, 2L, 4L, 1L, 2L, 4L,
2L, 3L, 4L)
基本上这些复合命令最终要做的是:
> c("Northeast", "South", "North Central", "West")[c(2L, 4L, 4L, 2L, 4L, 4L, 1L, 2L, 2L, 2L, 4L, 4L, 3L, 3L, 3L,
3L, 2L, 2L, 1L, 2L, 1L, 3L, 3L, 2L, 3L, 4L, 3L, 4L, 1L, 1L, 4L,
1L, 2L, 3L, 3L, 2L, 4L, 1L, 1L, 2L, 3L, 2L, 2L, 4L, 1L, 2L, 4L,
2L, 3L, 4L)]
获取字符向量的更简单的语法是使用as.vector(state.region)
。