【问题标题】:Direct access to Vector elements in a data.frame in R?直接访问R中data.frame中的Vector元素?
【发布时间】:2011-09-18 05:51:44
【问题描述】:

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

我尝试了几件事,但都没有奏效。我只有列的索引,但没有名称,因为我想使用循环来插入多个列。

看来我有一个基础知识空白,希望你能帮我填补。

【问题讨论】:

    标签: arrays r vector types


    【解决方案1】:

    试试

    nerv[5,2]
    

    还有……

    ?'['
    

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

    【讨论】:

    • 我已经尝试过nerv[2,5],但它给出了NULL。我也尝试过as.vector(nerv[2])[5]
    • 从前到后,行在前,列在后。你们俩都搞错了。
    • @Gavin,我确定@John 打错字了...[已修复]。
    • @aL3xa 哎呀抱歉,应该已经解决了。 @John,对不起,我不是故意的。
    • 我猜我确实打错了... :) 谢谢 aL3xa
    【解决方案2】:

    你想要:

    > nerv[5,2]
    [1] 5
    

    一般模式是[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
    

    请注意,对于其中的第一个,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`

    【讨论】:

      【解决方案3】:

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

      nerv[[2]][5]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-06
        • 2014-08-25
        • 2016-08-24
        相关资源
        最近更新 更多