【问题标题】:values don't match level in R值与 R 中的级别不匹配
【发布时间】:2016-07-19 04:33:57
【问题描述】:

给定数据框的几列是因子水平向量,以其中之一为例:

[4661] 12.7          13.2          10.1          12.3         
[4665] Not Available 12.7          Not Available Not Available
[4669] Not Available Not Available Not Available 11.1         
[4673] 9.9           9             Not Available 9.7          
[4677] 8.9           10.1          11.7          13           
[4681] Not Available 11.5          Not Available Not Available
[4685] 12.3          11.2          Not Available 11.1         
[4689] 10.4          Not Available Not Available Not Available
[4693] 11.5          Not Available Not Available Not Available
[4697] Not Available Not Available 12            Not Available
[4701] Not Available Not Available Not Available Not Available
[4705] Not Available Not Available
106 Levels: 10 10.1 10.2 10.3 10.4 10.5 10.6 10.7 10.8 10.9 ... Not Available

老是说106级是从10开始,然后是10.1,但实际上10以下的值有很多,如上表所示。

如何解决这个问题,并让关卡自动匹配所有值?谢谢。

【问题讨论】:

  • 使用levels函数了解所有这些。
  • 这是一个明智的设计决策 - 当可能有数百万个级别时,您不会期望 R 打印出每个级别。
  • @thelatemail 我的问题是它 (10,10.1,10.2) 似乎暗示最低级别是 10,而显然有许多小于该级别的值
  • @user6606453 - 字母数字顺序“10”在“9”、“8”、“7”等之前。
  • @thelatemail 谢谢!!那是我没有意识到的!现在这对我来说没有意义,因为我想得到这个向量的最小值(我认为是 8.2)。如何调整它的格式?

标签: r dataframe r-factor


【解决方案1】:

您可以通过一些 re-factor-ing 将顺序更改为数字顺序

x <- factor(c(10,10.1,10.2,9,8,1,"Not available"))
levels(x)
#[1] "1"             "10"            "10.1"          "10.2"         
#[5] "8"             "9"             "Not available"


factor(x, levels=levels(x)[order(as.numeric(as.character(levels(x))),na.last=TRUE)])
#[1] 10            10.1          10.2          9             8             1             Not available
#Levels: 1 8 9 10 10.1 10.2 Not available

可以说,您应该首先将此数据用作数字,例如:

as.numeric(as.character(x))
#[1] 10.0 10.1 10.2  9.0  8.0  1.0   NA

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 2015-07-24
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多