是否可以直接访问data.frame中的向量元素?
# DataFrame
nerv <- data.frame(
c(letters[1:10]),
c(1:10)
)
str(nerv)
# Accessing 5th element of the second variable/column
# This should give "5", but it does NOT work
nerv[2][5]
# Works, but I need to know the NAME of the column
nerv$c.1.10.[5]
我尝试了几件事,但都没有奏效。我只有列的索引而不是名称,因为我想使用循环来交互几个列。
似乎我有一个基本的知识差距,我希望你能帮助我填补它。
答案 0 :(得分:12)
你想:
> nerv[5,2]
[1] 5
一般模式是[r, c]
,其中r
为行编制索引,c
索引要提取的列/变量。其中一个或两个都可能丢失,在这种情况下,它意味着给我所有没有索引的行/列。 E.g。
> nerv[, 2] ## all rows, variable 2
[1] 1 2 3 4 5 6 7 8 9 10
> nerv[2, ] ## row 2, all variables
c.letters.1.10.. c.1.10.
2 b 2
请注意,对于第一个,R已经删除了空维,从而产生了一个向量。要取消此行为,请将drop = FALSE
添加到呼叫中:
> nerv[, 2, drop = FALSE] ## all rows, variable 2
c.1.10.
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
我们还可以使用列表样式表示法来提取数据框的组件。 [
会将组件(列)提取为一列数据框,而[[
将提取相同的内容但会删除维度。此行为来自列表上的常见行为,其中[
返回列表,而[[
返回索引组件内的事物。一些例子可能有所帮助:
> nerv[2]
c.1.10.
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
> nerv[[2]]
[1] 1 2 3 4 5 6 7 8 9 10
> nerv[[1:2]]
[1] 2
这也解释了为什么nerv[2][5]
失败了。 nerv[2]
返回一个包含单个列的数据框,然后您尝试从中检索第5列。
详细信息都包含在帮助文件?Extract.data.frame
或?`[[.data.frame`
答案 1 :(得分:7)
由于数据框在技术上是一个列表,因此也可以:
nerv[[2]][5]
答案 2 :(得分:3)
试
nerv[5,2]
和...
?'['
这应该有助于填补你的空白。