2017-11-23 13 views
0

私はこの問題に対する解決策を多くの運が必要なことなく探してきました。 ファイルのループを繰り返して、割合の不測の表を取得しています。例:私は間違って行くところ明らかに疑問符があるテーブルからのデータフレームの行への結果R

results<-data.frame("F"=0, "W"=0,"F1"=0,"F2"=0,"BCF"=0,"BCW"=0) 
results[1,]<-??? 

df<-data.frame("Ind"=c("A1","A2","A3","A4","A5"), "Highest"=c("W","W","BCW","BCW","W")) 
tabledf<-table(df$Highest)/length(df$Highest) 

私は上記の表の結果と「空」のデータフレームに記入したいと思います。私はすべてのファイルをループするように書かれたコードを持っていますが、それぞれの不測の事態の表を作成していますが、上記の例のように、結果を[すべてのカテゴリがすべてのテーブルに存在するわけではありません。私はエラーなしでmatch()を試しましたが、ただNAを返します。私はオーバーループするよ他のファイルのための追加の行と

>results 

    F W F1 F2 BCF BCW 
1 0 0.6 0 0 0 0.4 

は、私のようなものを見て、最終的な製品をしたいと思います。

ありがとうございました!

答えて

2

あなたのベクトルをしなければならないfactorと可能levelsを指定:

table(factor(df$Highest,lev=c("F","W","F1","F2","BCF","BCW")))/length(df$Highest) 

    F W F1 F2 BCF BCW 
0.0 0.6 0.0 0.0 0.0 0.4 

EDIT data.frame内のデータを取得するには、あなたができる:

result <-data.frame(t(as.vector(tabledf))) 
colnames(result) <- names(tabledf) 
result 

    F W F1 F2 BCF BCW 
1 0 0.6 0 0 0 0.4 
+0

@EmmaSylvester私は答えを編集して結果を 'data.frame'に追加しました。 –

1

ちょうどresultsをサブセット化tabledfの名前を使用します。

results[names(tabledf)] <- tabledf 
results 
# F W F1 F2 BCF BCW 
#1 0 0.6 0 0 0 0.4 

するか、これはforループの一部である場合、あなたはまだやることができます:results[1, names(tabledf)] <- tabledf

0

ライブラリ(dplyr)は、ここで有用である可能性があります。

df %>% group_by(Highest) %>% summarise(N=n()) %>% mutate(freq=N/sum(N)) 

これは、すべてのファイルについてこれをループする必要があります。これが正しい軌道に乗ることを願っています。

関連する問題