2016-04-06 5 views
2

から値のマトリックスを作成します。私はたいR:私は他のデータから生成<code>x</code>その周波数からなる次のデータフレーム、<code>table5</code>は、<code>counts</code>を使用している他のテーブル

x freq 
1 1 3 
2 3 21 
3 4 21 
4 5 1345 
5 7 1 

転送します -

 Frequency 
3    21 
4    21 
5    1345 
other   4 

すなわち番号3、図4及び図5の周波数が直接転送される場合、及びAl:次のデータフレームtable5ifに - 一般的な様式で、すなわち、元のデータフレーム内の他の値を使用するためその他の数字はotherに一緒に追加されます。私の最新の試みはこれです:すべての警告またはエラー(例えば、「項目の数置き換えるために...」と次元の「数のいくつかのフォームが得られている

k <- seq(1, nrow(table5), by=1) 
    ifelse(table5$x[k] == 3, table5if[1] <- table5$freq[k], 
      ifelse(table5$x[k] == 4, table5if[2] <- table5$freq[k], 
       ifelse(table5$x[k] == 5, table5if[3] <- table5$freq[k], table5if[4] <- (table5if[4] + table5$freq[k]) 
       ) 
      ) 
    ) 

この試み、とif(...){...} else {...} etc.を使用して他の試み..私は、エラー/警告のために無数の他の質問を見てきましたが、私が探しているものを見つけることができませんでした。ベクトル化についてはたくさんありますが、私はこの小さな仕事のために適切なオプションを提案してもらえますか?

+0

なぜ、すべての周波数を追加してから、3,4、および5の周波数を差し引いて、合計を計算してみませんか? –

+0

これは確かに最も簡単なオプションです!私は準備が整った関数を避け、数学と論理を保つファンです。あなたの提案、windrunn3r.1990のために多くのありがとう! – Psydes

答えて

3

私はfactor(x, levels = 3:5)で集計しますが、存在しないレベルはすべてNAになります。必要ならばこれを後で"other"に変更してください。それは%in%と「X」列の値に基づいて論理インデックスを作成することでそれらを

library(data.table) 
setDT(df)[, .(Frequency = sum(freq)), by = factor(x, levels = 3:5)] 
# factor Frequency 
# 1:  NA   4 
# 2:  3  21 
# 3:  4  21 
# 4:  5  1345 
+0

これもうまくいった! David Arenburgに感謝します。 – Psydes

0

base Rオプションを省略するのではなく、NAの別のグループを維持するようdata.tableは、この場合に便利です。 'i1'の無効化インデックスと 'table5'のサブセット行を持つrbindに基づいて 'freq'のsumを取得します。

i1 <- table5$x %in% 3:5 
`row.names<-`(rbind(table5[i1,], list(x= "Other", 
      freq=sum(table5[!i1,"freq"]))), NULL) 
#  x freq 
#1  3 21 
#2  4 21 
#3  5 1345 
#4 Other 4 
+0

これは絶対的な治療をしました!私はtable5から値を操作してテストしましたが問題はありませんでした。あなたのための+10通りの信用、akrun!どうもありがとうございました。 – Psydes

+0

@Psydesフィードバックありがとうございます。 upvoteを忘れましたか? – akrun

関連する問題

 関連する問題