Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 提取因子级别时出现意外行为_R_Levels - Fatal编程技术网

R 提取因子级别时出现意外行为

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 我想提取一个水平向量,我认为这是正确的方法,但

有人能解释为什么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
我想提取一个水平向量,我认为这是正确的方法,但正如你所看到的,三次偷袭破坏了我的函数

> 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