我正在使用data.table
来查找“会话”的平均日期,但我在尝试按照我想要的方式进行格式化时遇到了麻烦,我对这个问题感到困惑:
library( data.table )
data <- data.table( session = c( 1,1,1,1,2,2,2,2,2,2,3,3,3,3 ),
date = as.Date( c( "2016-01-01", "2016-01-02", "2016-01-03", "2016-01-03",
"2016-04-30", "2016-04-30", "2016-05-03", "2016-05-03", "2016-05-03", "2016-05-03",
"2016-08-28", "2016-08-28", "2016-08-28", "2016-08-28" ) )
)
我想要的是根据会话的时间给每个会话一个标签。我决定将每个会话标记为会话发生的月份(格式为“%b-%Y”),但由于会话有时跨越2个月,我想通过取平均日期来做到这一点会话,并使用它来决定标签。
我可以使用by
参数找到每个会话的平均日期:
output <- copy( data )[ , Month := mean( date ), by = session ]
我还可以在data.table
内以我想要的方式重新格式化平均日期:
output <- copy( data )[ , Month := format( mean( date ), "%b-%Y" ) ]
但我不能同时做到这两点:
output <- copy( data )[ , Month := format( mean( date ), "%b-%Y" ), by = session ]
以上内容会返回错误:
Error in prettyNum(.Internal(format(x, trim, digits, nsmall, width, 3L, :
invalid 'trim' argument
In addition: Warning message:
In mean(date) : argument is not numeric or logical: returning NA
我在这里做错了什么?代码看起来对我来说,每个部分工作正常,为什么这不起作用?
注意我可以通过两个步骤(下面)完成我需要的工作,并且工作正常,但我很想知道它是什么,我很想念。上面的代码出了点问题,我只是看不出它是什么:
output <- copy( data )[ , Month := mean( date ), by = session
][ , Month := format( Month, "%b-%Y" ) ]
答案 0 :(得分:3)
如果您使用mean.Date
代替mean
:
output <- copy( data )[ , Month := format( mean.Date( date ), format="%b-%Y" ), by = session ]
这样就利用了format.Date