2017-03-01 5 views
0
library(tidyverse) 
library(stringr) 
library(lazyeval) 
以下

簡単なデータフレーム例えばデータです... 機能は標準評価、Forcats、およびStringrで複数の満足度スケール変数をコーディングし直す

Respondent<-c("Respondent1","Respondent2","Respondent3","Respondent4","Respondent5") 
Sat1<-c("1 Extremely dissatisfied","2 Moderately dissatisfied","2 Moderately Dissatisfied","4 Neutral","7 Extrmely satified") 
Sat2<-c("7 Extremely Satisfied","2. Moderately dissatisfied","4 Neutral","3 Slightly dissatisfied","3 Slightly Dissatisfied") 
Sat3<-c("1 Extremely dissatisfied","7 Extremely satisfied","6 Moderately satisfied","4. Neutral","3 Slightly dissatisfied") 
Pet<-c("Cat","Cat","Dog","Hamster","Rabbit") 

df <- data_frame(Respondent,Sat1,Sat2,Sat3,Pet) 

次のコードは、満足度スコア列を再コーディングすることです

満足、不満、中立という3つのカテゴリーに分類されます。

df %>% 
mutate_at(vars(starts_with("Sat")), 
    funs(fct_collapse(factor(str_sub(., 1, 1), levels = as.character(1:7)), 
          Satisfied = c("7","6","5"), 
          Dissatisfied =c ("3", "2","1"), 
          Neutral = "4"))) 

しかし、私の本当の例では、 複数のファイル、満足度スケールの列の数が異なるごとに、同じ満足度スケールを再コーディングが含まれます。ですから、私はこれをデータフレーム名と再コードする任意の数の列に入力できるようにする関数に入れたいと思います。以下は私が使用しようとしているコードの変種ですが、動作させることはできません。私はドットを使って遊んでいましたが、 "..."が、何かを見つけることができませんでした。

REC<-function(data,...){ 
data %>% 
mutate_at(vars(...), 
    funs(fct_collapse(factor(str_sub(., 1, 1), levels = as.character(1:7)), 
        Satisfied = c("7","6","5"), 
        Dissatisfied =c ("3", "2","1"), 
        Neutral = "4"))) 
        } 

mutate_atで標準評価を使用する必要がありますか?また、.dotsを...と使用する必要がありますか? mutate_atで標準評価が機能しない場合は、他の関数/手法を使用して同じ最終目標を達成することができます。

答えて

1

starts_with("Sat")はすべてのファイルに対して機能しますか?そうであれば、関数は "Sat"で始まる列の数に関係なく機能します。あなたが変更したい列のインデックスに沿って渡したい場合は

REC <- function(data){ 
    data %>% 
    mutate_at(vars(starts_with("Sat")), 
        funs(fct_collapse(factor(str_sub(., 1, 1), levels = as.character(1:7)), 
            Satisfied=c("7","6","5"), 
            Dissatisfied=c("3", "2","1"), 
            Neutral="4"))) 
} 

、あなたが試すことができます:

REC <- function(data, variable){ 
    data %>% 
    mutate_at(vars(variable), 
       funs(fct_collapse(factor(str_sub(., 1, 1), levels = as.character(1:7)), 
            Satisfied=c("7","6","5"), 
            Dissatisfied=c("3", "2","1"), 
            Neutral="4"))) 
} 

はその後REC(df, 2:4)はあなたに、この出力

# A tibble: 5 × 5 
    Respondent   Sat1   Sat2   Sat3  Pet 
     <chr>  <fctr>  <fctr>  <fctr> <chr> 
1 Respondent1 Dissatisfied Satisfied Dissatisfied  Cat 
2 Respondent2 Dissatisfied Dissatisfied Satisfied  Cat 
3 Respondent3 Dissatisfied  Neutral Satisfied  Dog 
4 Respondent4  Neutral Dissatisfied  Neutral Hamster 
5 Respondent5 Satisfied Dissatisfied Dissatisfied Rabbit 
を与えます
関連する問題