我今天的第二个问题,也是我最后一次使用R清理数据的尝试。这是sitrep:
我有一个数据框,该数据框的列是POSIXlt日期类型。我想从该列中提取日,月和年,并创建3个新的列,分别称为(聪明地)日,月和年。
数据框如下所示:
order_id dd_mmm_yy
1 2005-07-28
2 2007-03-04
我要结束这个:
order_id dd_mmm_yy day month year
1 2005-07-28 28 7 2005
2 2007-03-04 4 3 2007
我创建了一个提取日期,月份和年份并将其返回到列表中的函数(或数据框,我都尝试过)。
extractdate = function (date) {
day = format(date, format="%d")
month = format(date, format="%m")
year = format(date, format="%Y")
list(day=day, month=month, year=year)
}
这是我根据较早出现的问题尝试过的方法:
cbind(orders, t(sapply(orders$dd_mmm_yy, extractdate)))
这给了我这个:
Error in data.frame(..., check.names = FALSE) :
arguments imply differing number of rows: 5, 9
t(sapply ...本身由于某种疯狂的原因而给了我这个:
day month year
sec Character,5 Character,5 Character,5
min Character,5 Character,5 Character,5
hour Character,5 Character,5 Character,5
mday Character,5 Character,5 Character,5
mon Character,5 Character,5 Character,5
year Character,5 Character,5 Character,5
wday Character,5 Character,5 Character,5
yday Character,5 Character,5 Character,5
isdst Character,5 Character,5 Character,5
到底是怎么回事?在将数据带入R进行分析之前,我是否最好使用Python或Java之类的工具对这些数据进行所有数据处理?
最佳答案
POSIXlt
对象是9个组件的列表(有关更多信息,请参见?POSIXlt
的“详细信息”部分)。由于dd_mmm_yy
列为POSIXlt
,因此不需要提取组件的函数。您可以按组件名称提取它们:
orders$day <- orders$dd_mmm_yy$mday # day of month
orders$month <- orders$dd_mmm_yy$mon+1 # month of year (zero-indexed)
orders$year <- orders$dd_mmm_yy$year+1900 # years since 1900
orders
# order_id dd_mmm_yy day month year
# 1 1 2005-07-28 28 7 2005
# 2 2 2007-03-04 4 3 2007
关于r - 从POSIXlt中提取日期元素,并放入R中的数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8126537/