1

私は3つのベクトルを作成しました:

v1 = c(1,2,3)
v2 = c(11,22,33)
v3 = c(111,222,333)

それから私はそれらからフレームを作りました:

> df = data.frame(vec1 = v1, vec2 = v2, vec3 = v3)                                                                                                                                
> df
  vec1 vec2 vec3
1    1   11  111
2    2   22  222
3    3   33  333

現在、列名は自動ではないようですが、vec1, vec2, vec3

vec2この後、11に等しいフレーム行を取得したいと思います。

> df[vec2 == 11,]
Error in `[.data.frame`(df, vec2 == 11, ) : object 'vec2' not found

ただし、次のコードは機能します。

> df[v2 == 11,]
  vec1 vec2 vec3
1    1   11  111

これは間違っていると思います。Rタグの代わりに古いベクトル名を使用する理由がわかりませんvec1, vec2, vec3

それは私のバージョンのバグRですか?

R version 2.15.2 (2012-10-26)
Platform: x86_64-apple-darwin12.2.0/x86_64 (64-bit)
4

4 に答える 4

2

次のいずれかを使用します。

df[df$vec2 == 11, ]

また

df[with(df, vec2 == 11), ]

2番目の行は、v2 == 11評価TRUE, FALSE, FALSEのために機能し、最初の行が印刷されていました。ただし、vec2は設定されている変数ではありません。の列ですdata.frame。したがって、それをそのように識別する必要がありますdf$vec2(またはを使用しますwith

于 2013-01-27T20:48:56.590 に答える
2

次の構文を使用する場合:

df[vec2 == 11,]

Rは、ベクトルdfの値に基づいての行を選択しようとしています。vec2しかし、そのようなベクトルはありません。この名前のデータフレームの列のみがあります。したがって、探している構文は次のとおりです。

df[df$vec2 == 11,]

ベクトルはRセッションで以前に定義されているため、以下は機能します。

df[v2 == 11,]
于 2013-01-27T20:50:33.750 に答える
2

これはバグではなく、誤解です。v2を使用して削除するrm(v2)df[v2 == 11,]失敗します。subset()列名を使用してデータフレームをサブセット化するために使用できます。

> subset(df, vec2 == 11)
  vec1 vec2 vec3
1    1   11  111

subset特定の列の抽出もサポートします。

> subset(df, vec2 == 11, select = vec1:vec2)
  vec1 vec2
1    1   11
于 2013-01-27T20:57:07.930 に答える
0

最初に添付 する場合は、上記の構文を使用できます。df

df = data.frame(vec1 = v1, vec2 = v2, vec3 = v3)
attach(df)
df[vec2 == 11,]

出力します:

   vec1 vec2 vec3
1    1   11  111

これは、コンソールでの作業中にタイピングが回避されるという点で役立つ場合がありますが、Google Rスタイルガイドに従って、スクリプト作成中は一般的に回避する必要があります。

于 2013-01-27T21:53:20.043 に答える