从R数据帧中选择时不需要的输出(级别)

时间:2014-06-10 19:05:53

标签: r dataframe

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

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”看起来并不好看。有没有办法把它关掉?

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

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

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]

会做到这一点。