I am trying to categorize age into group so it will not be continuous. I have this code:
data$agegrp(data$age>=40 & data$age<=49) <- 3
data$agegrp(data$age>=30 & data$age<=39) <- 2
data$agegrp(data$age>=20 & data$age<=29) <- 1
the above code is not working under survival package. It's giving me:
invalid function in complex assignment
Can you point me where the error is? data
is the dataframe I am using.
This answer provides two ways to solve the problem using the
data.table
package, which would greatly improve the speed of the process. This is crucial if one is working with large data sets.1s Approach: an adaptation of the previous answer but now using
data.table
+ includinglabels
:2nd Approach: This is a more wordy method, but it also makes it more clear what exactly falls within each age group:
Although the two approaches should give the same result, I prefer the 1st one for two reasons. (a) It is shorter to write and (2) the age groups are ordered in the correct way, which is crucial when it comes to visualizing the data.
I would use
findInterval()
here:First, make up some sample data
Use
findInterval()
to categorize your "ages" vector.Alternatively, as recommended in the comments,
cut()
is also useful here:Let's say that your ages were stored in the dataframe column labeled
age
. Your dataframe isdf
, and you want a new columnage_grouping
containing the "bucket" that your ages fall in.In this example, suppose that your ages ranged from 0 -> 100, and you wanted to group them every 10 years. The following code would accomplish this by storing these intervals in a new
age grouping
column: