2012-09-12 9 views
20

私はこのサンプルコードを使用して、既存のデータフレーム 'my_data'から新しいデータフレーム 'new_data'を作成します。変数の前のドル記号

new_data = NULL 
n = 10 #this number correspond to the number of rows in my_data 
conditions = c("Bas_A", "Bas_T", "Oper_A", "Oper_T") # the vector characters correspond to the target column names in my_data 
for (cond in conditions){ 
    for (i in 1:n){ 
     new_data <- rbind(new_data, c(cond, my_data$cond[i])) 
    } 
} 

問題がmy_data$cond(condが列名変数であり、ない場合)が受け入れられないことです。

ドル記号の後に変数値を使用してデータフレームの列を呼び出すにはどうすればよいですか?所望の値を得るために、両方を組み合わせ

my_data[i, ] 

i行目はでアクセスすることができる

my_data[ , cond] 

又は

my_data[[cond]] 

:カラム、使用にアクセスする

+8

'$'は実際にはプログラムで使用するつもりはありません。これは対話的な使用の便宜を目的としています。代わりに 'mydata [i、cond]'を使ってみてください。しかし、あなたのコードを見ると、あなたは 'reshape'関数か実際には' reshape2'パッケージを見れば恩恵を受けると思います。 – James

+0

'my_data'は' dataです。new_dataは 'matrix'です。 – GSee

+3

'fortune(312)'を参照してください。 –

答えて

32

my_data[i, cond] 

または

my_data[[cond]][i] 
+0

私たちは 'c $ column'を使います。ここで' c'は行列ですか? 'C $ col1のエラー:$演算子は原子ベクトルには無効です'。... – Mahesha999

+0

@ Mahesha999行列に '$'を使うことはできません。 –

3

私はあなたがget()が必要と思います。例えば

listはリストであり、xlist$xに等しい変数(文字列であってもよい)であり、
get(x,list)、。

しかし、get(x,list)では、xは変数であり、$を使用している場合はxを変数にすることはできません。

0

$は、個々の列オブジェクトではなく、列に対して機能します。これはベクトル化の一形態です。コード

corrections$BookDate = as.Date(corrections$BookDate, format = "%m/%d/%Y") 

DateオブジェクトへのストリングからcorrectionsテーブルのBookDate列の内容を変換します。 1回の操作で割り当てを実行します。

は、次の操作を行い、それがあなたの問題を解決します:

new_data <- rbind(new_data, c(cond, my_data$cond)) 
0

あなたは、多くの場合、全体の列、データフレームから、すなわち一つの特定の変数を選択することになるでしょう。あなたは可変直径のすべての要素を選択したい場合は、例えば、これらの両方は、トリックを行います:

dataframe_name[,column_position] 
dataframe_name[,"column_name"] 

ただし、ショートカットがあります。列に名前がある場合は、$という記号を使用することができます。

dataframe_name$column_name 
関連する問題