提取因子水平时出现意外行为

发布于 2024-08-30 18:15:37 字数 389 浏览 10 评论 0原文

有人可以解释为什么 level() 显示三个因子级别,而您可以看到向量只有两个?

> 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

Can someone explain why levels() shows three factor levels, while you can see that the vector has only two?

> 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

I would like to extract a vector of levels, and I thought this was the proper way, but as you can see, a three sneaks in there which is messing up my function.

> as.numeric(levels(walk.df$walker))
[1] 1 2 3

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梦回梦里 2024-09-06 18:15:37

可能 walk.df 是具有 3 个级别的因子变量的子集。
比如说,

a<-factor(1:3)
b<-a[1:2]

那么 b 有 3 个级别。

删除额外级别的一个简单方法是:

b<-a[1:2, drop=T]

或者如果您无法访问原始变量,

b<-factor(b)

probably walk.df is a subset of the factor variable with 3 levels.
say,

a<-factor(1:3)
b<-a[1:2]

then b has 3 levels.

A easy way to drop extra level is:

b<-a[1:2, drop=T]

or if you cannot access the original variable,

b<-factor(b)
南七夏 2024-09-06 18:15:37

您可以将多个因子级别分配给包含两个级别的因子:

 > 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

You can assign several factor levels to a factor that contains two levels:

 > 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

or even no levels at all:

 > p <- NA
 > q <- factor(p)
 > levels(q)
 character(0)
 > levels(q) <- c("1", "2", "3")
 > q
 [1] <NA>
 Levels: 1 2 3
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文