【问题标题】:Undesired output (Levels) while selecting from R dataframe [duplicate]从 R 数据帧中选择时出现不需要的输出(级别)[重复]
【发布时间】:2014-07-31 16:31:12
【问题描述】:

我的部分代码类似于以下内容:

id.row <- c("x1","x2", "x10", "x20")
id.num <- c(1, 2, 10, 20)
id.name <- c("one","two","ten","twenty")
info.data <- data.frame(id.row, id.num, id.name)

req.mat <- matrix(1:4, nrow = 2, ncol = 2)
row.names(req.mat) <- c("x1","x10")

p1 <- info.data$id.row %in% row.names(req.mat)

op1 <- info.data$id.num[p1]
op2 <- info.data$id.name[p1]

我认为代码几乎是不言自明的,并且得到了我想要的结果。打印op1 没有问题,但是当我尝试获取op2 时,它会给我额外的输出(Levels)。因为,原始info.data 中有 1000 行,所以这个“level”看起来不太好。有没有办法关掉它?

【问题讨论】:

  • data.frame(..., stringsAsFactors = FALSE)
  • 可能重复:每个 R 问题
  • 链接的“重复”问题与这个问题完全不同。这是询问如何不打印因子,另一个是询问如何删除不再使用的额外因子水平。

标签: r dataframe


【解决方案1】:

也许你可以使用print(op2, max.levels=0)

【讨论】:

  • 这个建议在打印因子向量时对我有用。
【解决方案2】:

如果您不希望任何变量成为因子,那么

info.data <- data.frame(id.row, id.num, id.name, stringsAsFactors=F)

是个不错的选择。如果您希望 id.row 而不是 id.name 成为一个因素,那么

info.data <- data.frame(id.row=factor(id.row), id.num, id.name, 
    stringsAsFactors=F)

最好设置它。如果您以其他方式创建数据,因此它们已经作为 data.frame 中的因素存在,您可以使用

将它们转换回字符
info.data$id.name <- as.character(info.data$id.name)

如果您确实希望 id.name 成为一个因素,但只是想在子集化后降低额外的级别,那么

op2 <- info.data$id.name[p1, drop=T]

会成功的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-16
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 2019-02-24
    • 1970-01-01
    • 2018-02-16
    相关资源
    最近更新 更多