2016-07-23 15 views
-2

dfの行ごとの値の頻度をチェックし、値の1つが6回以上現れるかどうかを調べる関数が必要です。新しい列の値。そうでない場合は、同じ新しい列に "nope"を書き込む。 次の例では、行の値は1,2または3のいずれかになります。したがって、値1,2または3のいずれかが行ごとに6回以上現れる場合は、(1,2、or3)新しい列に表示する必要があります。行ごとに6回以上表示されない値がない場合、その同じ新しい列の値は "nope"にする必要があります。 example行の数値の要約を抽出する関数R

+0

と' table' – akrun

答えて

0

make_count_col <- function(x) { 
    cnt <- apply(x, 1, table) 
    x$newcolumn <- apply(cnt, 2, function(y) { 
    if (max(y, na.rm = T) < 6) 
     out <- 'nope' 
    else 
     out <- names(y)[which.max(y)] 
    out 
    }) 
    x 
} 

あなたの例で複製

x <- as.data.frame(matrix(c(1, 2, 1, 2, 2, 2, 2, 2, 3, 
          2, 3, 1, 1, 3, 2, 1, 1, 3), nrow = 2, byrow = T)) 
colnames(x) <- paste0('svo', 1:9) 
make_count_col(x) 
    svo1 svo2 svo3 svo4 svo5 svo6 svo7 svo8 svo9 newcolumn 
    1 2 1 2 2 2 2 2 3   2 
    2 3 1 1 3 2 1 1 3  nope 
あなたはapply` `をチェックすることができる
+0

親愛なるベン、感謝を使用して行ごとにtable関数を適用してみたが、私"Dim(x)は正の長さでなければならない"というエラーが出ます。これは、基本的には適用できないことを示しています:)オブジェクトcntに対するapply関数は、オブジェクトcntがリストであるためです。私は、 "apply(x、1、table)"を使って関数の外側にcntオブジェクトを作成しようとしましたが、データフレームに戻すと、ベクトルを含む列が作成されます。リストに追加して、私はmax関数をさらに適用できません。 –

+0

関数に 'x'として渡すもののより良い例を提供できますか?私はあなたが上記で与えたものを使ってみました。 –

+0

こんにちはベン、ありがとう、それはスタックされたRセッションでした:(あなたのご協力ありがとうございます –

関連する問題