直接访问R中data.frame中的Vector元素?

时间:2011-06-19 17:43:55

标签: arrays r vector types

是否可以直接访问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]

我尝试了几件事,但都没有奏效。我只有列的索引而不是名称,因为我想使用循环来交互几个列。

似乎我有一个基本的知识差距,我希望你能帮助我填补它。

3 个答案:

答案 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]

和...

?'['

这应该有助于填补你的空白。