假设我有一个日期列的框架:
test.frame$alt_dates <- c('2001-01-04', '2001-05-11', '2001-05-14', '2001-07-24', '2003-12-24', '2004-07-21', '2004-10-15', '2004-12-15', '2005-03-17', '2005-07-18')
Run Code Online (Sandbox Code Playgroud)
他们从角色开始.好的:
class(test.frame$alt_dates)
[1] "character"
Run Code Online (Sandbox Code Playgroud)
如果我尝试使用transform将这些日期转换为日期:
transform(test.frame, alt_dates <- as.Date(alt_dates)
Run Code Online (Sandbox Code Playgroud)
R只是将我的框架打印到控制台.如果我直接转换列,它工作正常:
test.frame$alt_dates <- as.Date(test.frame$alt_dates)
class(test.frame$alt_dates)
[1] "Date"
Run Code Online (Sandbox Code Playgroud)
我对Transform的错误是什么?
更新:正如一些人注意到的那样,我没有把结果分配给任何东西.这样就解释了打印到屏幕并且没有存储任何更改.但即使我捕获结果它也不起作用:
test.frame <- transform(test.frame, more_dates <- as.Date(more_dates))
class(test.frame$more_dates)
[1] "character"
Run Code Online (Sandbox Code Playgroud)
正如@Andrie和@StephanKolassa所说,你需要分配结果.但是,你在使用中犯了另一个错误transform,恰好在这种情况下工作,但几乎在任何其他情况下都会咬你.<-并且=在这种情况下不可互换.您应该使用=具有transform(在这种情况下,我觉得它的工作原理,因为测试数据帧只有一个列!)
test.frame <- data.frame(alt_dates=c('2001-01-04', '2001-05-11', '2001-05-14',
'2001-07-24', '2003-12-24', '2004-07-21', '2004-10-15', '2004-12-15',
'2005-03-17', '2005-07-18'))
test.frame <- transform(test.frame,alt_dates=as.Date(alt_dates))
Run Code Online (Sandbox Code Playgroud)