我有这种格式的数据框:
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。
答案 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)