如何访问R中表中的单个元素

Posted

技术标签:

【中文标题】如何访问R中表中的单个元素【英文标题】:How to access single elements in a table in R 【发布时间】:2011-11-18 22:01:41 【问题描述】:

如何从R 的表格中抓取元素?

我的数据如下所示:

         V1     V2
1      12.448 13.919
2      22.242  4.606
3      24.509  0.176

等等……

我基本上只想单独抓取元素。我对所有 R 术语(例如向量)感到困惑,我只想了解各个元素。

是否有一个函数可以让我像data[v1][1] 一样获取第 1 行第 1 列中的元素?

【问题讨论】:

尝试阅读手册:here 和 here。 我在发布之前查看了这两个链接,但我没有遇到这种表示法。答案中描述。 不明白为什么这被否决了。这是一个结构良好的问题,答案很好。 (我投了反对票。)我同意它的格式和声音都很好,但它非常基本。如果您说“我阅读了有关索引的帮助页面 (?Extract) ...”,或“我阅读了 R 介绍中关于选择数据集子集的第 2.7 节...”或以其他方式证明了努力自己解决问题,我会更慈善。 (我看到您现在在 cmets 中已经说过了。)我只是担心我们会被基本的索引问题所淹没……如果您进行编辑(以便我可以),我将推翻我的反对意见。 这是一个数据框,而不是一个表格。 【参考方案1】:

试试

data[1, "V1"]  # Row first, quoted column name second, and case does matter

进一步说明:讨论 R 的术语可能很关键,有时也很棘手。使用术语“表”来指代该结构留下了它是“表”类、“矩阵”类或“data.frame”类对象的可能性。上面的答案对它们中的任何一个都会成功,而下面@BenBolker 的建议只会对“data.frame”类对象成功。

有大量免费的 R 初学者入门资料:CRAN: Contributed Documentation

【讨论】:

data[["V1"]][1](更接近原始问题) 使用read.cv 读取表格,当我尝试时:dat[["V1"]][1] 我得到这个[1] 5042951 54 Levels: 11054 1156785) 1157947) 1159014) 1166898) 1174855) ... src,trg,sp_len,hops 我怎么才能得到5042951 @sAguinaga 你有一个因子变量。 as.character()-函数应该包裹在 dat[['V1']] 周围以提取因子值。然后使用[1] 选择第一个。任何再次阅读这些 cmets 的人都应该了解 Ben Bolker 的策略仅对数据帧有效,其逻辑是先选择一整列,然后获取其中的第一项。我的建议对于矩阵和数据框都将成功。在这种情况下,无法确定原始数据是数据框还是矩阵对象。 就其价值而言,R 充满了不寻常的语法。有很多程序员习惯于像 foo[y][x] 这样的索引,并表示程序员可能能够在 R 中走得很远一个绊脚石,比如发现这种双下标符号并没有达到他们的预期。当您在考虑另一种语言并且不知道它被称为什么时,这并不是很容易用谷歌搜索的东西,因此 Stack Overflow 是一个合理的问题。 使用“[”和两个用逗号分隔的索引参数用于数据帧和矩阵访问。我发现很难相信在任何对 R 的明智介绍中都没有很早地涵盖这一点。如果有人从另一种语言来到 R 并且没有阅读任何介绍性材料,那么我认为在不看他们的选择的情况下询问 SO精品手册首先值得被劝阻。 (我同意在 Google 或 SO 上搜索基本的索引语法可能并不容易,但这就是为什么最好从印刷的介绍中进行一些自学。)【参考方案2】:

?"[" 几乎涵盖了访问事物元素的各种方式。

根据使用情况,它列出了这些:

x[i]
x[i, j, ... , drop = TRUE]
x[[i, exact = TRUE]]
x[[i, j, ..., exact = TRUE]]
x$name
getElement(object, name)

x[i] <- value
x[i, j, ...] <- value
x[[i]] <- value
x$i <- value

第二项足以满足您的目的

Arguments 下,它指出[ 的参数ij 可以是数字、字符或逻辑

所以这些工作:

data[1,1]
data[1,"V1"]

这样:

data$V1[1]

请记住,数据框是向量列表:

data[[1]][1]
data[["V1"]][1]

两者都可以。

所以这是一些事情要做。我建议您一次一行在帮助页面底部输入示例(是的,实际上一次一行输入整个内容,看看它们都做了什么,您会很快学会打字而不是复制粘贴是帮助记忆的重要部分。)

【讨论】:

所以它是?"["...我正在尝试?[?[] 之类的东西,但我一直收到Error: unexpected '[' in "?["。谢谢! 是的,您必须引用任何不是纯字母数字或关键字的内容(例如,您还需要引用 iffor ,例如 -- ?"if"?"for" 不是 ?if?for)。即使不需要引用也无妨。【参考方案3】:

也许没有上面的那么完美,但我想这就是你要找的。​​p>

data[1:1,3:3]    #works with positive integers
data[1:1, -3:-3] #does not work, gives the entire 1st row without the 3rd element
data[i:i,j:j]    #given that i and j are positive integers

这里的索引将从 1 开始,即

data[1:1,1:1]    #means the top-leftmost element

【讨论】:

以上是关于如何访问R中表中的单个元素的主要内容,如果未能解决你的问题,请参考以下文章

访问 HTML 中的单个 JSON 元素

使用 ruby​​、Sinatra 和 Mandrill 如何从 api 调用访问单个元素并打印为 HTML?

访问指针数组/通过另一个指针并删除数组中的单个元素而不删除第一个指针或整个数组

如何使用核心 R 操作/访问“dist”类实例的元素?

如何重新排列R中的单个细胞?

使用 R 更新 SQL Server 中表的多个列