计算年龄
问题描述:
样品计算年龄
df <- data.frame(
Birth_Date = c("1952-03-21", "1963-12-20", "1956-02-25", "1974-08-04", "1963-06-13", "1956-11-20", "1974-03-07", "1963-10-23", "1952-11-24", "1974-12-16"),
Items_Amount = c(68,189,69,19,299,79,149,149,29,189)
)
df
我试图分析一个数据集,其中有跨90年列Item_Amount(以$)和客户的出生日期蔓延。目标是比较基于适当年龄组的销售百分比。
主要数据帧包含日期“出生日期”,从“1902年2月13日”到“1991年12月11日”的日期不是字符串列
'data.frame': 350241 obs. of 1 variable:
$ BirthDate: Date, format: "1964-06-08" "1964-06-08" "1964-06-08" "1964-06-08" ...
> min(Trans_Cust$Birth_Date)
[1] "1902-02-13"
> difftime(max(Trans_Cust$Birth_Date),min(Trans_Cust$Birth_Date),units = "auto")
Time difference of 32808 days
> max(Trans_Cust$Birth_Date)
[1] "1991-12-11"
如何找到立足现在年龄“Birth_Date”列,将其存储到新列“Present_ages”,然后继续计算由present_ages分组的sum(Items_Amount)
。
答
我假设你的出生日期只是字符串,所以你需要将它们转换为某种形式的日期。我正在使用POSIXct
。转换后,您可以设置十进制边界,并使用cut
将日期分组。
BirthDate = c("1964-06-08", "1964-06-08", "1964-06-08", "1964-06-08",
"1902-02-13", "1991-12-11", "1944-06-06", "1929-10-24")
StartDecade = seq(as.POSIXct("1900-01-01"), as.POSIXct("2000-01-01"), by="10 years")
cut(as.POSIXct(BirthDate), breaks=StartDecade)
[1] 1960-01-01 1960-01-01 1960-01-01 1960-01-01 1900-01-01 1990-01-01 1940-01-01 1920-01-01
这可能是更漂亮,以简化的名称
as.numeric(cut(as.POSIXct(BirthDate), breaks=StartDecade)) - 1
[1] 6 6 6 6 0 9 4 2
+0
感谢您的输入。 我编辑了问题的详细信息,你可以再次看看它,并帮助我。 –
答
这一个数值“圆”回归十年:
BirthDate = as.Date(c("1964-06-08", "1964-06-08", "1964-06-08", "1964-06-08", "1902-02-13", "1991-12-11", "1944-06-06", "1929-10-24"))
BDdecade <- round(as.numeric(format(BirthDate, "%Y"))-5, -1)
BDdecade
#[1] 1960 1960 1960 1960 1900 1990 1940 1920
所需提取的一年,转换成数字和减去5,因为floor
函数不具有相同的容量,可舍入到几十和几百,与round
一样。
,目前还不清楚是什么,为“十年所需的出发点应该是,这将分裂最小日期的基础上。
> BDdecade2 <- cut(BirthDate, breaks= seq(min(BirthDate), max(BirthDate), by= "10 years"))
> BDdecade2
[1] 1962-02-13 1962-02-13 1962-02-13 1962-02-13 1902-02-13 <NA> 1942-02-13
[8] 1922-02-13
8 Levels: 1902-02-13 1912-02-13 1922-02-13 1932-02-13 1942-02-13 ... 1972-02-13
的NA建议你可能需要添加+365
(或者甚至更多)到最大日期。
确保你提供了[可重现的例子](http://*.com/questions/5963269/how-to-make-a-great-r-reproducible-example )在寻求帮助的时候,这里的期望输出到底是什么?这几十年你想做什么? – MrFlick
@MrFlick详情添加了 –
你的mo相关问题涉及agegroup01 - agegroup09,但您对数据的描述表明您的数据跨越了10年。 – G5W