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

R_U*_*ser 2 arrays types r vector

是否可以直接访问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]
Run Code Online (Sandbox Code Playgroud)

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

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

Rei*_*son 12

你要:

> nerv[5,2]
[1] 5
Run Code Online (Sandbox Code Playgroud)

一般模式是对行[r, c]进行r索引,并c为要提取的列/变量编制索引.其中一个或两个都可能丢失,在这种情况下,它意味着给我所有没有索引的行/列.例如

> 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
Run Code Online (Sandbox Code Playgroud)

请注意,对于第一个,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
Run Code Online (Sandbox Code Playgroud)

我们还可以使用列表样式表示法来提取数据框的组件.[将组件(列)提取为一列数据框,同时[[提取相同的内容但会丢弃尺寸.此行为来自列表上的常规行为,其中[返回列表,而[[返回索引组件内的事物.一些例子可能有帮助:

> 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
Run Code Online (Sandbox Code Playgroud)

这也解释了为什么nerv[2][5]失败了.nerv[2]返回一个包含单个列的数据框,然后尝试从中检索第5列.

这样做的细节都包含在帮助文件?Extract.data.frame?`[[.data.frame`


Sac*_*amp 7

由于数据框在技术上是一个列表,这也有效:

nerv[[2]][5]
Run Code Online (Sandbox Code Playgroud)