2011-06-19 33 views
2

是否可以直接訪問data.frame中的向量元素?直接訪問R中data.frame中的Vector元素?

# 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] 

我嘗試了幾件事情,但都沒有工作。我只是列的索引,但沒有名稱,因爲我想要使用循環來交織幾列。

看來我有一個基本的知識缺口,我希望你能幫我填補它。

回答

12

你想:

> 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[5,2] 

和...

?'[' 

這將有助於在你的間隙填充了一下。

+0

我已經嘗試過'NERV [2,5 ]',但它給出了NULL。我也嘗試過諸如'as.vector(nerv [2])[5]' –

+1

之類的東西,這是回到前面,第一行,第二列。你們都有這個錯誤的方式。 –

+1

@Gavin,我相信@約翰犯了一個錯字... [修正]。 – aL3xa

7

由於數據幀在技術上是一個清單,這也適用:

nerv[[2]][5]