向量中的列名丢失

时间:2015-07-24 10:45:14

标签: r dataframe

我有这种格式的数据框:

DF1 <- DF0[i,6:12]  (DF0 is the original data frame I read from)

生成的DF1具有以下列名:

DF1:  
home - train -bus -car  .. - male - female
1       3      0              0       1

我所做的是恢复0列的名称,例如:

colNull <- colnames(DF1[,DF1==0]) 

我的理解是,这产生了一系列的价值观&#39; (因为在大多数DF0行中,有几列是0):

colNull   like  'bus','male'.....   (char type)

但是,当DF1中只有一列为0时,列名不再恢复,因此colNull为NULL(类(colNull也为NULL),我可以&#39;使用。

这有一个简单的解决方法吗?我也想了解为什么会这样,或者我做错了什么。我得到的是关于对象格式的东西,但不是背后的原因。

提前致谢,p。

1 个答案:

答案 0 :(得分:2)

当我们对具有单行的数据集进行子集时,或者如果输出是单列,则在进行子集化时将其降为向量。基于?"["的默认选项是

  x[i, j, ... , drop = TRUE]

所以names

 names(DF1[,DF1==0])
 #[1] "bus"  "male"

或使用drop=FALSE应该正常工作

 colnames(DF1[,DF1==0, drop=FALSE])
 #[1] "bus"  "male"

或者另一种选择是将逻辑矩阵转换为具有as.vector的逻辑向量,它应该按预期工作。

 colnames(DF1[as.vector(DF1==0)])
 #[1] "bus"  "male"

注意:这不是一般情况,因为有多行,我们可能需要使用colSums(DF1)==0

数据

 DF1 <- data.frame(home=1, train=3, bus=0, male=0, female=1)