2016-04-13 9 views
0

İnsanların yaşları olan bir dosyam var ve yaş aralıkları (örneğin, en az 10, 35-44 vb.) Alt gruplarını ayırmak istiyorum.Regex in R - tamsayı dizgisinden (100 adede kadar) yalnızca tek tamsayılar (10'dan az) döndürüyor

çift haneli sayılar yaş aralıkları iken

ince grep kullanarak çalışıyor:

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

10 ör altında herhangi bir şey için subsetine çalışıyor: İçinde 1 ile herhangi bir yaş geri am

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

(örn. 31) ya da 10'un altındaki sayılardan ziyade 2 ya da 3'dür.

Bunun gerçekleşmediğinden nasıl emin olabilirim?

Herhangi bir yardım çok takdir edilecektir! Başarısız kodumu kabul ziyade ben regex stratejisi ile katılmıyorum gidip yerine cut veya findInterval kullanmanızı öneririz ediyorum daha etkili kodlama çözümü yayınlamıyor prensibi kullanarak peşin

+5

daha kolay olmaz mıydı dönüştürmek için 'X $ Yaş <- as.integer (X $ Age) 've' X_10under <- alt kümesini (X, Yaş <= 10) 'kullanın? – rhole

+1

[böylece bir problemi çözmek için regex kullandınız ve şimdi başka bir probleminiz var mı?] (Https://xkcd.com/1171/) – rawr

+0

Eğer regex kullanmanız gerekiyorsa, önce ve sonra gelenleri belirtmeniz gerekir. bir basamak değil: 'paste0 ('\\ D', 1:10, '\\ D', daraltma = '|')' – alistaire

cevap

1

yılında

teşekkürler.

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

Bu işe yaramış bir teşekkür sağladı - daha önce hiç kullanılmamıştı ve çok sayıda satırı basitleştirdi Her yaş grubunu kapsayan kod aşağı doğru. – 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-")) 

Kendi aralığı seçin ile çözüm ...