2016-12-23 103 views
0

在一列中的观测值I有如下的数据:如何清洁中的R

head(MS.data.in) 
    encounter_id patient_nbr   race gender  age weight admission_type_id 
1  2278392  8222157  Caucasian Female [0-10)  ?     6 
2  149190 55629189  Caucasian Female [10-20)  ?     1 
3  64410 86047875 AfricanAmerican Female [20-30)  ?     1 
4  500364 82442376  Caucasian Male [30-40)  ?     1 
5  16680 42519267  Caucasian Male [40-50)  ?     1 
6  35754 82637451  Caucasian Male [50-60)  ?     2 

我WUD喜欢通过取上2位的给定间隔的东西来改变“年龄”列的OBS如下图所示:

head(MS.data.in$age) 
[1] 10 20 30 40 50 60 

回答

3

我们可以使用sub通过匹配字符,直到提取的值,接着,接着字符,直到字符串末尾的捕获组((\\d+))内的数字-.*-)(.*)并替换为捕获组的反向引用(\\1)。

MS.data.in$age <- as.numeric(sub(".*-(\\d+).*", "\\1", MS.data.in$age)) 
MS.data.in$age 
#[1] 10 20 30 40 50 60 
+1

优秀..这将需要时间让我了解'sub'如何工作.....通过修改代码尝试间隔的前两位数字......失败悲惨! – Nishant

+0

@Nishant谢谢你的留言。这里的关键是我们用来匹配所有的字符单元,'''ie'。* - ',并且从例子中可以看到'-'后面的数字('\\ d +' - '+'表示一个或多个)我们捕获一个组,即在括号内('(...)'),并替换为'\\ 1',因为它是第一个捕获组。你也可以勾选[here](http://stackoverflow.com/help/someone-answers) – akrun