【问题标题】:how to view head of as.data.frame in R? [closed]如何在 R 中查看 as.data.frame 的头部? [关闭]
【发布时间】:2015-07-22 04:43:36
【问题描述】:

我有一个包含 20 列和 20,000 行的庞大数据集,根据我使用的程序手册,我们必须将数据作为数据框,虽然我不明白它的作用.. 和我似乎无法查看我创建的头部数据框。

我用粗体写了我不明白的部分,我对 R 很陌生,好心人可以向我解释一下下面的工作原理吗?

首先我阅读了 CSV 文件

vData = read.csv("my_matrix.csv");

1)这里我们按照手册创建数据框,-c(1:8)到底是做什么的?

dataExpr0 = as.data.frame(t(vData[, -c(1:8)]))

2) 在这里,为了了解上述部分的作用,我尝试仅查看数据框的标题,使用以下行,但它显示了 20,000 行数据的前 2 列。 有没有办法只查看前 2 行?

head(dataExpr0, n = 2)

【问题讨论】:

  • head() 应该显示数据的顶部行,而不是第一列
  • @madkitty, -c(1:8) 从数据框或矩阵中删除前 8 列。但这里的问题是,您使用t() 函数将某些内容从 20000 到 12 转换为 12 到 20000。因此,您对head(data, 2) 的使用将生成 2 行和 20,000 列。我希望这会有所帮助。

标签: r dataframe


【解决方案1】:

让我们从内到外剖析你的电话在做什么。

基本索引

当索引data.framematrix(假设为二维)时,您可以使用方括号符号访问其中的单个元素,如您所见。例如,要查看第四行第五列中的值,您可以使用vData[4,5]。这也适用于行和/或列的范围,例如 vData[1:4,5] 将前 4 行和第 5 列作为向量返回。

注意:1:4 范围也可以是任意数字向量,例如返回 3 x 2 矩阵的vData[c(1,2,5),c(4,8)]

顺便说一句: 默认情况下,当生成的切片/子矩阵的其中一个维度减少到 1 时(如后一个示例所示),R 会将其放到较低的结构(例如,matrix -> vector -> scalar)。在这种情况下,它会将vData[1:4,5] 放到一个向量中。您可以通过在方括号中添加看似第三维的内容来防止这种情况发生:vData[1:4,5,drop=FALSE],意思是“不要删除简化的维度”。现在,您应该得到一个 4 行 1 列的矩阵作为回报。

您可以通过阅读(例如)一些"Hadleyverse" 来阅读有关如何对 data.frames 进行子集化的更全面的说明。如果您这样做,我强烈建议您将其设为交互式会话:在阅读时播放 R,以帮助巩固方法。

负索引

负索引表示“所有除了列出的内容”。在您的示例中,您正在对数据进行子集化以提取所有 列 1:8 的内容。因此,您的 vData[,-c(1:8)] 返回所有行和列 9 到 20,即 20K x 12 矩阵。不小。

换位

您可能已经知道t() 的作用:转置矩阵,使其现在为 12 x 20K。

警告:如果您的所有 data.frame 列都属于同一类(例如,“字符”、“逻辑”),那么一切都很好。但是,data.frames 允许在不同列中使用不同类型的数据这一事实并不是矩阵共享的特征。如果一个 data.frame 列与其他列不同,它们将被转换为最高通用格式,例如,logical < integer < numeric < character

返回data.frame

转置后(转换为matrix),您转换回data.frame,这可能需要也可能不需要,具体取决于稍后打算如何处理数据。例如,如果行名没有意义,那么转换为 data.frame 可能就没那么有用了。这相对无关紧要,但我喜欢不要过度转换事物。我也喜欢使用更简单的数据结构,而且矩阵通常比 data.frames 更快。

... 只为您提供 data.frame 或矩阵的顶部 n rows。在您的情况下,由于您转置了它,它现在是 20K 列宽,这在命令行上可能有点笨拙。

替代方案

根据我之前提供的内容,您可能只想查看前几行和前几列? dataExpr0[1:5,1:5] 会起作用,head(dataExpr0[,1:5], n=5) 也会起作用。

还有其他问题吗?

我强烈建议您阅读更多 Hadleyverse 并更加熟悉子集和基本数据管理。这是使用 R 的基础,而 StackOverflow 并不总是有足够的耐心来回答这样的基线问题。这个论坛最适合那些已经做了一些研究,阅读文档和帮助页面,并尝试了一些代码,然后才弄清楚为什么它不起作用的人。您提供的一些基本代码很好,但 SO 并不适合教授如何从 R 开始。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-22
    • 1970-01-01
    • 2018-10-09
    • 1970-01-01
    • 1970-01-01
    • 2012-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多