2017-10-04 16 views
1

愚かな質問かもしれませんが、私は複数の条件で複数変数を複数のコードに再コードしたいと思います。Rでtidyverseを使用して複数の変数を記録する

データ例:このような何かを与える

library(tidyverse) 
s <- matrix(sample(1:15, 20, replace = TRUE), ncol = 4) 
s <- as_tibble(s) 

# A tibble: 5 x 4 
    V1 V2 V3 V4 
    <int> <int> <int> <int> 
1 11  2  5 14 
2  5  4 15  5 
3 13 15  2  5 
4  7 13 15 11 
5 11  5 12  3 

私はこの条件でV1、V2、V3を再コーディングしたい、と等しいV4残し:値がある場合 を5以下であれば1を、5以上であれば10を2に、最後に10以上であれば3を得る。

[OK]を次のように:

# A tibble: 5 x 4 
     V1 V2 V3 V4 
     <int> <int> <int> <int> 
    1 3  1  1  14 
    2 1  1  3  5 
    3 3  3  1  5 
    4 2  3  3  11 
    5 3  1  3  3 

私は約vapply、sapply、適用を知っているが、私はtidyverseパッケージとエレガントな方法で関数を使用して再コーディングしたいと思います。

ありがとうございます!

+0

はdplyrで 'mutate_at'を見てみましょう。これは、複数の列に同じ機能を適用するように設計されていますが、好きなだけ選択できます。 – MrFlick

答えて

5

@MrFlickコメントで詳しく説明するには、mutate_atとdplyrのcase_when関数を組み合わせて使用​​できます。それは次のようになります。

s %>% 
    mutate_at(vars(V1:V3), 
      function(x) case_when(x <= 5 ~ 1, x <= 10 ~ 2, TRUE ~ 3)) 

これはあなたを与える:

# A tibble: 5 x 4 
    V1 V2 V3 V4 
    <dbl> <dbl> <dbl> <int> 
1  3  1  3  6 
2  2  1  1  8 
3  2  3  1 14 
4  1  3  3 15 
5  1  2  3  7 
+0

V4の列にはタイプミスがありますが、それは機能します!私にmutate_at関数を紹介してくれてありがとう! –

+1

どこが誤植ですか?あなたは数字が違うことを指していますか?そうであれば、それは単に 'sample'が私のために行列を作成するときに異なる数字を使用し、その後あなたがそれをしたときのことです。 – tbradley

+1

私はただ実現しました!それはうまく動作します! –

関連する問題