如何访问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
下,它指出[
的参数i
和j
可以是数字、字符或逻辑
所以这些工作:
data[1,1]
data[1,"V1"]
这样:
data$V1[1]
请记住,数据框是向量列表:
data[[1]][1]
data[["V1"]][1]
两者都可以。
所以这是一些事情要做。我建议您一次一行在帮助页面底部输入示例(是的,实际上一次一行输入整个内容,看看它们都做了什么,您会很快学会打字而不是复制粘贴是帮助记忆的重要部分。)
【讨论】:
所以它是?"["
...我正在尝试?[
或?[]
之类的东西,但我一直收到Error: unexpected '[' in "?["
。谢谢!
是的,您必须引用任何不是纯字母数字或关键字的内容(例如,您还需要引用 if 和 for ,例如 -- ?"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中表中的单个元素的主要内容,如果未能解决你的问题,请参考以下文章
使用 ruby、Sinatra 和 Mandrill 如何从 api 调用访问单个元素并打印为 HTML?