【问题标题】:R matrix and data.frame mix-upR矩阵和data.frame混淆
【发布时间】:2014-06-10 18:27:32
【问题描述】:

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

首先,“有问题”的代码行是:

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

仅供参考,我已确认 covar.dataonoff 都是 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&lt;-data.frame(a=1,b=2,c=3); onoff&lt;-data.frame(a=1,b=-1,c=1); covar.data[, !onoff]
  • onoff&lt;-data.frame(a=0,b=-1,c=0 执行covar.data[,!onoff] 后从covar.data 中保留0 列

标签: r dataframe


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-25
    • 2022-01-05
    • 2015-01-14
    • 1970-01-01
    • 1970-01-01
    • 2015-12-17
    • 2020-10-01
    相关资源
    最近更新 更多