我当天的第二个问题和我最后一次尝试使用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
到底是怎么回事?我最好使用像Python或Java这样的东西来完成我需要对这些数据进行的所有数据操作,然后再将它带入R进行分析吗?
3 回答
POSIXlt
对象是9个组件的列表(有关详细信息,请参阅?POSIXlt
的“详细信息”部分) . 因为dd_mmm_yy
列是POSIXlt
,所以您不需要函数来提取组件 . 您只需按名称提取组件即可:一个班轮使用
lubridate
试试这个(DF作为你的data.frame):