2017-06-24 46 views
0

私は同様の投稿をhttps://stackoverflow.com/questions/6104836/splitting-a-continuous-variable-into-equal-sized-groups参照してください。しかし、ここで私の問題は、範囲は文字列であることが必要です。以下 は、これらの値を使用した後、しかしcut by defined interval連続変数をRの離散値(英数字)に変換します。範囲はアルファベット数字です

name salary bonus increment(%) 
AK 20K-30K 120 2 
BK >30K  34 .1 
JK 10K-20K 400 3 
VK <10K  350 15 
DK <10K  NA NA 

で対処されていない英数字である"> 30K""20K-30K"、給与カラムは"< 10K""10K-20K"ような範囲で変更する必要が私のデータフレーム

df 
name salary bonus increment(%) 
AK 22200 120 2 
BK 55000 34 .1 
JK 12000 400 3 
VK 3400 350 15 
DK 5699 NA NA 

df = structure(list(name = c("AK", "BK", "JK", "VK", "DK"), salary = c(22200L, 55000L, 12000L, 3400L, 5699L), bonus = c(120L, 34L, 400L, 350L, NA), `increment(%)` = c(2, 0.1, 3, 15, NA)), .Names = c("name", "salary", "bonus", "increment(%)"), row.names = c(NA, -5L), class = "data.frame") 

ありますrで定義された間隔でカットされていない場合は、コードが df$salary<-cut(df$salary,breaks = c(0,10000,20000,30000,60000),include.lowest = TRUE)

出力はあなたがdplyrパッケージからcase_when機能を使用することができます

name  salary bonus increment(%) 
    1 AK (2e+04,3e+04] 120   2.0 
    2 BK (3e+04,6e+04] 34   0.1 
    3 JK (1e+04,2e+04] 400   3.0 
    4 VK  [0,1e+04] 350   15.0 
    5 DK  [0,1e+04] NA   NA 
+0

これは重複した質問ではなく、ここでの範囲は基本的に英数字の値です。 – Anurodh

答えて

1

です。 df2が最終出力です。

library(dplyr) 

df2 <- df %>% 
    mutate(salary = case_when(
    salary < 10000     ~ "<10K", 
    salary >= 10000 & salary < 20000 ~ "10K-20K", 
    salary >= 20000 & salary < 30000 ~ "20K-30K", 
    salary >= 30000     ~ ">30K", 
    TRUE        ~ "NA" 
)) 
+0

ありがとう、case_whenはこのシナリオでは非常に適しているようでした。 My Rスタジオのように、ケースでは給与$ inforntを使用していましたが、給与変数を見つけることができないというエラーが発生しました。 – Anurodh

関連する問題