2017-11-21 7 views
0

私のデータセットのサブセクターに従って変数の平均値を持つ列を作成しようとしています。この場合、平均は郡の観測値から計算された各状態の犯罪率であり、次に、それらが位置している状態に関連して各郡にこの数を割り当てる。ここに関数が書いた。R - 列のサブセクターの平均値をそのサブセクターの各行に割り当てます。

Data.Final$state_mean <- 0 

そして、平均値を計算し、割り当てる新しい列を作成します。ここで

for (j in range[1:3136]) 
{ 
     state <- Data.Final[j, "state"] 
     Data.Final[j, "state_mean"] <- mean(Data.Final$violent_crime_2009-2014, 
     which(Data.Final[, "state"] == state)) 
} 

あなたは、初心者を助けるために数分かかることができれば、次のエラー

Error in range[1:3137] : object of type 'builtin' is not subsettable 

は非常に高く評価されます。

+0

ダッシュのため、 'violent_crime_2009-2014'は標準の列名ではありません。 'Data.Final $ \' violent_crime_2009-2014 \ ''や '[': 'Data.Final [[" violent_crime_2009-2014 "]]' – Gregor

+0

で引用符で囲んで使用する必要があります。 '[]' on ''は関数である '[]]です。 'range(1:3137)'はエラーを出さないが、おそらくあなたが意図していることはしません – dww

答えて

0

あなたはいくつかの問題を持っている:

  • range[1:3136]は有効な構文ではありません。 range(1:3136)は有効な構文ですが、range()関数は最小値と最大値を返します。 1:3136以上のものは必要ありません。その代わりに代わりに for (j in 1:3136)を使用してください。

  • ダッシュのため、violent_crime_2009-2014は標準の列名ではありません。あなたはData.Final$\ violent_crime_2009-2014``または[と引用符で、バッククォートでそれを使用する必要があります:Data.Final[["violent_crime_2009-2014"]]またはData.Final[, "violent_crime_2009-2014"]

また、あなたのコードは非常に非効率的である - あなたは一つ一つの時間に平均値を再計算します。 Mean by Group R-FAQをご覧ください。グループ化された手段を得るためには、より迅速で簡単な方法がたくさんあります。

追加パッケージを使用せずに、あなたが親しみやすい構文と効率化のために

Data.Final$state_mean = ave(x = Data.Final[["violent_crime_2009-2014"]], 
    Data.Final$state, 
    FUN = mean) 

を行うことができ、data.tabledplyrパッケージが人気があります。あなたは上のリンクでそれらを使用している例を見ることができます。

# Data for my example: 
data(InsectSprays) 

# Note I have a response column and a column I could subset on 
str(InsectSprays) 

# Take the averages with the by var: 
mn <- with(InsectSprays,aggregate(x=list(mean=count),by=list(spray=spray),FUN=mean)) 

# Map the means back to your data using the by var as the key to map on: 
InsectSprays <- merge(InsectSprays,mn,by="spray",all=TRUE) 

あなたが初心者に述べたので:ここ

0

が、これは(私が投稿し管理する前に、私がいない場合は、誰かがすぐにtidyverse答えを投稿します確信している)に行うことができる多くの方法の一つであります可能な限り、Rでループするのを避けてください。可能であれば、操作をベクトル化してください。集約とマージの使い方の良い点は、ルーピングや奇妙なことが起こったときにインデックスシフトが発生するため、マッピングのエラーを心配する必要がないことです。

乾杯!

関連する問題