R矩阵和数据帧混淆

R矩阵和数据帧混淆,r,dataframe,R,Dataframe,我在R中有一个data.frame,其中的列也有列名。 我还有另一个data.frame,它带有0和-1,用于控制在后续分析中从第一个data.frame中使用哪些列。 我现在遇到了一个我无法理解的问题 首先,“违规”代码行是: covar.data<-covar.data[,!onoff] 及 covar.data如果选择data.frame中的一列,R会假定您希望将该数据提取为向量,而不是返回另一个data.frame(在大多数情况下,这正是您想要的行为)。但是,如果您确实希望将该列

我在R中有一个data.frame,其中的列也有列名。 我还有另一个data.frame,它带有0和-1,用于控制在后续分析中从第一个data.frame中使用哪些列。 我现在遇到了一个我无法理解的问题

首先,“违规”代码行是:

covar.data<-covar.data[,!onoff]


covar.data如果选择
data.frame
中的一列,R会假定您希望将该数据提取为向量,而不是返回另一个data.frame(在大多数情况下,这正是您想要的行为)。但是,如果您确实希望将该列保留为
data.frame
,那么您应该这样做

covar.data[,!onoff, drop=F]

我不认为它会变成一个矩阵,它可能会变成一个向量。尝试
covar.data[,!onoff,drop=F]
。您确定
onoff
是一个data.frame吗?如何使用另一个data.frame为data.frame列编制索引?那没有道理。也许你应该
dput
对象,或者至少给出
str
的结果,这样我们就可以重现。@MrFlick你能把它作为解决方案发布吗,因为drop=F有效。我必须补充的是,R确实将其转化为一个矩阵:我测试了is.matrix(covar.data)、is.data.frame(covar.data)和is.vector(covar.data),用于我选择了1列的情况,以及我选择了2列或更多列的情况。我还测试了onoff是一个data.frame,同样的方法。另外,我对onoff中的具体内容感到困惑。你的数据是这样的吗<代码>冠状病毒数据
onoff
covar.data<-as.data.frame(covar.data[,!onoff], col.names=TRUE)
covar.data[,!onoff, drop=F]