私は大学生で、Rの試験を始めます。 この投稿に関連する多くの質問があるので、曖昧なタイトルには申し訳ありません。R - サンプリングの頻度ヒストグラム:効率など
私は、男性(M)または女性(F)の人口をサンプリングするという問題に遭遇しました。この母集団の男性と女性の数を取る関数を定義し、sample.number
のサイズのサンプルをsample.size
として作成し、サンプルの合計サイズに対する女性のサンプルの割合と関連する頻度を含むデータフレームを返します。
私はこれを行うには、シンプルで、よく最適化された方法があるポジティブだけど、私は(ほとんど)に動作することを小さな関数書いた:
senators <- function(Fem = 13,
Mal = 87,
sample.size = 10,
sample.number = 100){
pop <- c(rep("F", Fem), rep("M", Mal)) # I create the population base
popsa <- list(NA) # I make some empty variables used later
popsa.factor <- list(NA) # Not sure if this passage is even needed...
popsa.proportion <- list(NA)
ここfor
ループが来るの。私はfor
ループはこれを行うには本当に非効率な方法であることを読んだ。より良い方法がありますか?
for(i in 1:sample.number){
popsa[[i]] <- sample(pop, sample.size, replace = TRUE)
popsa.factor[[i]] <- table(factor(popsa[[i]], levels = c("M", "F")))
popsa.proportion[[i]] <- popsa.factor[[i]][2]/sample.size
}
Iは、私は、各サンプルからテーブルを作成するpopsa
を使用して、サンプルとリストpopsa
の各要素を割り当てることによって開始し、popsa.factor
に格納。それから私は女性全体の割合を計算し、それをpopsa.proportion
に保存します。このfor
ループは私には面倒なようですが、サンプルをたくさん処理するのが本当に遅いです。私がここでやったことをより良く、より効率的に行う方法はありますか? popsa.frequency
にそれらを格納し、それらの値は、周波数を取得するために、すべてのベクトルで割合、およびテーブルを取得するpopsa.proportion
非公開に
popsa.unlisted <- unlist(popsa.proportion)
popsa.frequency <- table(popsa.unlisted)
popsa.frame <- data.frame(Level = as.numeric(names(popsa.frequency)),
Freq = as.numeric(popsa.frequency))
return(popsa.frame)
} # This closes the function call
私はその後。今度は、popsa.frequency
を数値化してデータフレームの最初の列として格納することによって、データフレームに変換しようとします。popsa.frequency
この関数は、私が望むようにpopsa.frame
を返します。
popsa.frame
が、最初の列(Level
)にはpopsa.frequency
の因子特性を引き継いでいます。これをどうやって変更できますか?したほうがいい?
これらはサンプル配信の頻度であるため、hist()
は数値ベクトルしか受け付けないため、このデータフレームからヒストグラムを作成したいので、popsa.frame
は有効なオブジェクトではありません。 plot(popsa.frame)
は多かれ少なかれ私が望むものを返します。このようなヒストグラムを作成するにはどうしたらいいですか?
編集:下記のマークされた回答に続いて、関数が作成するデータフレームをhist()
が周波数ヒストグラムを作成するために実際に使用できるオブジェクトに変換する方法を紹介しました(バープロットを使用すると、
result <- senators(Fem=13,Mal=87,sample.size=50,sample.number=10000)
raw <- sapply(1:length(result$Level), function(x){
rep(result$Level, result$Freq)
})
hist(raw)
したがって、 'data.frame'の各列のヒストグラムを作成しますか? – patL
正確には、「y」軸は周波数で、「x」軸は比例値である単一のヒストグラムを作成したいと考えています。 @patL [This](https://i.imgur.com/pgSRKX9.png)のようなものですが、ヒストグラムの列があります。 –