R 提取因子级别时出现意外行为
有人能解释为什么levels()显示三个因子级别,而你可以看到向量只有两个因子级别吗R 提取因子级别时出现意外行为,r,levels,R,Levels,有人能解释为什么levels()显示三个因子级别,而你可以看到向量只有两个因子级别吗 > str(walk.df) 'data.frame': 10 obs. of 4 variables: $ walker : Factor w/ 3 levels "1","2","3": 1 1 1 1 1 2 2 2 2 2 > walk.df$walker [1] 1 1 1 1 1 2 2 2 2 2 Levels: 1 2 3 我想提取一个水平向量,我认为这是正确的方法,但
> str(walk.df)
'data.frame': 10 obs. of 4 variables:
$ walker : Factor w/ 3 levels "1","2","3": 1 1 1 1 1 2 2 2 2 2
> walk.df$walker
[1] 1 1 1 1 1 2 2 2 2 2
Levels: 1 2 3
我想提取一个水平向量,我认为这是正确的方法,但正如你所看到的,三次偷袭破坏了我的函数
> as.numeric(levels(walk.df$walker))
[1] 1 2 3
可能walk.df是因子变量的一个子集,有3个级别。 说
a您可以为包含两个级别的因子指定多个因子级别:
> set.seed(1234)
> x <- round(runif(10, 1, 2))
> x
[1] 1 2 2 2 2 2 1 1 2 2
> y <- factor(x)
> levels(y)
[1] "1" "2"
> levels(y) <- c("1", "2", "3")
> y
[1] 1 2 2 2 2 2 1 1 2 2
Levels: 1 2 3
>设置种子(1234)
>x x
[1] 1 2 2 2 2 2 1 1 2 2
>y级别(y)
[1] "1" "2"
>水平(y)y
[1] 1 2 2 2 2 2 1 1 2 2
级别:1 2 3
甚至没有任何级别:
> p <- NA
> q <- factor(p)
> levels(q)
character(0)
> levels(q) <- c("1", "2", "3")
> q
[1] <NA>
Levels: 1 2 3
>p q级别(q)
字符(0)
>水平(q)q
[1]
级别:1 2 3
您是对的,它是一个子集。我一直在切碎对象,以至于我忘了我是从原始对象中采样的,它有三个级别。…显示三个变量
也许你指的是值
或级别
?你是对的,我指的是级别。现在回想起来,人们可以使用droplevels()
在一个子集对象上,避免出现这个问题。作为对retrospect的回复,[
方法有drop
参数。哦,你知道什么…@kohske已经解决了。RTFM@aL3xa,RTFM…我真正想要的是提取子集中出现的级别。我已经用list.of.walkers解决了这个问题
b<-factor(b)
> set.seed(1234)
> x <- round(runif(10, 1, 2))
> x
[1] 1 2 2 2 2 2 1 1 2 2
> y <- factor(x)
> levels(y)
[1] "1" "2"
> levels(y) <- c("1", "2", "3")
> y
[1] 1 2 2 2 2 2 1 1 2 2
Levels: 1 2 3
> p <- NA
> q <- factor(p)
> levels(q)
character(0)
> levels(q) <- c("1", "2", "3")
> q
[1] <NA>
Levels: 1 2 3