我正在尝试过滤只有一列的数据框。这导致向量返回如下:
single.c <- data.frame(col1=c(1,2,3,4,5), row.names=C("r1","r2","r3","r4","r5"))
single.c[single.c$col1 > 2,]
[1] 3 4 5
我真正想要的是返回的数据与多列数据帧一样:
multi.c <- data.frame(col1=c(1,2,3,4,5), col2=c(1,2,3,4,5), row.names=c("r1","r2","r3","r4","r5"))
multi.c[multi.c$col2 > 2,]
col1 col2
r3 3 3
r4 4 4
r5 5 5
我可以看到,如果没有其他列,返回向量是有意义的,但通常我想看看哪些行也给出了结果。为什么会发生这种情况,是否有一种简单的方法可以保持结果中的数据框形状,包括rownames?
答案 0 :(得分:11)
使用drop
参数选择函数:
single.c[single.c$col1 > 2, ,drop=F]
# col1
#r3 3
#r4 4
#r5 5
来自[
的文档:
放弃
对于矩阵和数组。如果为TRUE,则结果强制为最低 可能的维度(参见示例)。这仅适用于提取 元素,不是为了替换。有关详细信息,请参阅drop。