【发布时间】:2014-06-10 18:27:32
【问题描述】:
我在 R 中有一个 data.frame,其中的列也有列名。 我有另一个带有 0 和 -1 的 data.frame,它控制在后续分析中从第一个 data.frame 使用哪些列。 我现在遇到了一个我无法解决的问题。
首先,“有问题”的代码行是:
covar.data<-covar.data[,!onoff]
仅供参考,我已确认 covar.data 和 onoff 都是 data.frames。
当我使用 onoff 选择 2 列或更多列来运行它时,一切都很好,并且生成的 covar.data 仍然是一个 data.frame - 这很重要,因为我需要在其余部分中使用列名我的分析。
但是,如果我有 onoff 只选择 1 列,covar.data 会变成一个矩阵!这是一个问题,因为列名也消失了!
我试过了
covar.data<-as.data.frame(covar.data[,!onoff])
和
covar.data<-as.data.frame(covar.data[,!onoff], col.names=TRUE)
但这并没有影响列名的消失。
我不明白为什么 R 决定将 data.frame 变成一个矩阵(仅在我只剩下一列的时候),我不知道如何保留 data.frame 加上列名。
【问题讨论】:
-
我不认为它会变成矩阵,它可能会变成向量。试试
covar.data[,!onoff, drop=F]。你确定onoff是一个data.frame 吗?您究竟如何用另一个 data.frame 索引 data.frame 列?那没有意义。也许你应该dput对象或至少给出str的结果,以便我们可以重现。 -
@MrFlick 您可以将此作为解决方案发布,因为 drop=F 有效。我必须补充一点,尽管 R 真的把它变成了一个矩阵:我在选择 1 列的情况下测试了 is.matrix(covar.data)、is.data.frame(covar.data) 和 is.vector(covar.data) ,以及我选择了 2 个或更多列的情况。而且我还测试了onoff是一个data.frame,同样的方法。
-
我真的很困惑你在 onoff 中到底有什么。你的数据是这样的吗??
covar.data<-data.frame(a=1,b=2,c=3); onoff<-data.frame(a=1,b=-1,c=1); covar.data[, !onoff] -
onoff<-data.frame(a=0,b=-1,c=0执行covar.data[,!onoff]后从covar.data 中保留0 列