我的部分代码与以下内容类似:
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
”看起来并不好看。有没有办法把它关掉?
答案 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]
会做到这一点。