2016-04-13 5 views
0

私は人の年齢のファイルを持っており、年齢の範囲をサブセット化する必要があります(例えばunder10,35-44など)。二桁の数字の年齢範囲ながらRの正規表現 - 整数の文字列から10個未満の文字のみを返す(最大100)

は罰金はgrepを使用して動作します:

X_35_44 <- X[ grep("35|36|37|38|39|40|41|42|43|44", X$Age) , ] 

10例えば下何のためにサブセットしようとすると:

X_10under <- X[ grep("0|1|2|3|4|5|6|7|8|9|10|", X$Age) , ] 

私はそれに1を任意の年齢を返されています10歳未満の数字だけではなく、数字(例:31)または2または3を入力してください。

これが起こらないようにするにはどうすればよいですか?

ご協力いただければ幸いです。事前

+5

は 'Xの$の年齢を変換することが容易ではないでしょう< - as.integer(X $ Age) '' X_10under < - subset(X、Age <= 10) 'を使用しますか? – rhole

+1

[正規表現を使用して問題を解決しましたが、別の問題が発生しましたか?](https://xkcd.com/1171/) – rawr

+0

正規表現を使用する必要がある場合は、前後に来るものを指定する必要があります'paste0( '\\ D'、1:10、 '\\ D'、collapse = '|')' – alistaire

答えて

1

おかげで失敗したコードを受け付けないの原則を使用してではなく、より効果的なコーディングソリューションを提供し、私は正規表現の戦略に反対しようと、あなたの代わりにcutfindIntervalを使用することをお勧めしています。

X <- data.frame(Ages = sample(1:85, 300, repl=TRUE)) 
X$age_cat <- cut(X$Age, c(0, 10, 45, 60, 75, Inf), labels=c("under10", 
    '10-44','45-59','60-74','75+'), right=FALSE, include.lowest=TRUE) 
head(X) 
#=========  
    Ages age_cat 
1 65 60-74 
2 34 10-44 
3 19 10-44 
4 79  75+ 
5 5 under10 
6 51 45-59 
+0

これは、おかげでうまくいきました。各年齢層をカバーするコードを右下に表示します。 – rjf298

1

ifelse()

as.integer(df$age) 
    df$age_cat <- ifelse(df$age < 10, "age_0-10", ifelse(10 < df$age < 20, "age_10-20", "age_20-")) 

とソリューションは、あなた自身の範囲を選択してください...

関連する問題