4

データフレームの値を頻度に置き換えようとしています。

これが私のデータです:

blah<-list(c(1,1,2,2,3,1,3,2,2,5,5), c(7,8,7,8,9,9,7,8,9,7,7))
blah<-as.data.frame(blah)
colnames(blah)<-c("col1","col2")

2列のテーブルを作成しました。

次に、「テーブル」を使用して、両方の列の頻度を生成します。

col1Freq<-table(blah[,1])/dim(blah)[1]
col2Freq<-table(blah[,2])/dim(blah)[1]

私の目標は、何とかしてすべての値を周波数に置き換えることですしたがって、ファイナルテーブルは何とか同じサイズである必要がありますが、整数ではなく頻度が必要です。

申し訳ありませんが、表示する写真がありません....ご協力いただきありがとうございます!!!!

4

2 に答える 2

4

私があなたの質問を正しく理解していれば、ベースR関数ave()(誤解を招くような名前には注意を払わない)があなたが探していることを実行します。

blah2 <- 
transform(blah,
          col1Freq = ave(col1, col1, FUN=function(X) length(X)/nrow(blah)),
          col2Freq = ave(col2, col2, FUN=function(X) length(X)/nrow(blah)))

blah2[3:4]
#     col1Freq  col2Freq
# 1  0.2727273 0.4545455
# 2  0.2727273 0.2727273
# 3  0.3636364 0.4545455
# 4  0.3636364 0.2727273
# 5  0.1818182 0.2727273
# 6  0.2727273 0.2727273
# 7  0.1818182 0.4545455
# 8  0.3636364 0.2727273
# 9  0.3636364 0.2727273
# 10 0.1818182 0.4545455
# 11 0.1818182 0.4545455
于 2013-01-18T17:17:46.580 に答える
1

私も同じ問題に直面しました。私の場合、後で各列の頻度の積を計算するためにこのような変換が必要です。これにより、多変量(多次元)データの頻度(確率)が得られます。

私のソリューションは、任意の数の列で機能します。

apply(blah,2,function(x){
 t = as.data.frame(table(x))
 t$Freq[match(x,t[,1])]/length(x)
})
于 2015-01-15T10:43:27.907 に答える