2011-06-19 13 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 

は、我々はまた、データフレームの成分を抽出するには、リスト形式の表記を使用することができます。 [は、1列のデータフレームとしてコンポーネント(列)を抽出しますが、[[は同じものを抽出しますが、次元は削除されます。この動作はリストの通常の動作から来ます。[はリストを返しますが、[[はインデックスされたコンポーネント内のものを返します。例:

> 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または

3

nerv[5,2] 

と...

?'[' 

これはあなたのギャップにビットを埋める必要がありますしてみてください。

+0

[2,5 ] 'を返しますが、' NULL'を返します。私も 'as.vector(nerv [2])[5]' –

+1

のようなものを試しました。あなたはどちらもこれを間違った方法で持っています。 –

+1

@ギャビン、私は@ジョンがタイプミスをしたと確信しています... [固定]。 – aL3xa

7

データフレームは、技術的にリストをあるので?`[[.data.frame`、これも動作します:私はすでに `しようとしたNERV

nerv[[2]][5] 
関連する問題