我的数据集如下所示:如何获得分类变量的部分级别?
dsn register_at
1 AC000W000014612 Thu Mar 02 21:34:30 UTC 2017
2 AC000W000016124 Tue Mar 14 19:40:57 UTC 2017
3 AC000W000016219 Tue Apr 14 19:29:10 UTC 2017
我需要得到就像三月,四月等一个月规范每个DSN。我如何只从变量寄存器中获取月份规格?
我的数据集如下所示:如何获得分类变量的部分级别?
dsn register_at
1 AC000W000014612 Thu Mar 02 21:34:30 UTC 2017
2 AC000W000016124 Tue Mar 14 19:40:57 UTC 2017
3 AC000W000016219 Tue Apr 14 19:29:10 UTC 2017
我需要得到就像三月,四月等一个月规范每个DSN。我如何只从变量寄存器中获取月份规格?
您应执行以下步骤:
示例代码:
#Create the data frame
mdata <- data.frame(dsn=character(0), register_at=character(0))
mdata <- edit(mdata)
#Set the locale to en_US (This is required, because month/date names are in english)
Sys.setlocale(category = "LC_TIME", locale="English_US.1252")
Sys.getlocale()
#Convert the variable to date
mdata$register_at_date <- as.Date(mdata$register_at,format="%a %b %d %H:%M:%S UTC %Y")
#Extract the month part
mdata$month <- months(mdata$register_at_date)
#Print out the data frame
print(mdata)
您可以使用substr
函数,因为Month names
始终处于相同的位置。
substr(df$register_at, 5, 7)
它正在工作。我的机器可能有些麻烦。我重新启动了我的个人电脑和R,它的工作非常完美。 谢谢 –
@ P.Nitu,请将问题标记为已回答,如果它对您有帮助或至少是UP的话。 – AK47
为了将来的参考,我会尝试使用更标准化的格式(如年 - 月 - 日小时:分:秒)来写日期。
但是,我知道我们可能并不总是能够控制数据的格式(boo)。我想我会提到的是,如果它是更标准化的格式,lubridate
包有一个功能,称为floor_date
,可以很容易地完成这一点。
对于这个特定的情况下,你可以只用空格分割字符串和拆分后只选择第二个元素:
> # create data frame
> # note that, per your question, dsn and register_at are factors
> d <- data.frame(dsn=factor(c("AC000W000014612", "AC000W000016124", "AC000W000016219")),
+ register_at=factor(c("Thu Mar 02 21:34:30 UTC 2017", "Tue Mar 14 19:40:57 UTC 2017", "Tue Apr 14 19:29:10 UTC 2017")))
>
> library(stringr) # load package
> d$register_month <- str_split_fixed(as.character(d$register_at), " ", 3)[,2] # convert to character, split at a space, take the second element
> d
dsn register_at register_month
1 AC000W000014612 Thu Mar 02 21:34:30 UTC 2017 Mar
2 AC000W000016124 Tue Mar 14 19:40:57 UTC 2017 Mar
3 AC000W000016219 Tue Apr 14 19:29:10 UTC 2017 Apr
注意register_month
将是一个character
矢量,所以如果你想它作为一个因素,你也必须使用as.factor
来恢复到一个因素。
我无法确定没有数据,但是看起来你可能正在从'factor'到'character'的一个变化是让所有的东西都变成'NA'? R有时会因为因素而变得繁琐。 –
'sapply(strsplit(DF $ register_at, “\\ S”), “[”,2))' – emilliman5
是'register_at'真正明确的或者是一个日期?或一个字符串? – G5W
如果输入'sapply(last.reg_data,class)',你会得到什么? – G5W