2017-06-05 46 views
-1

我的数据集如下所示:如何获得分类变量的部分级别?

 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。我如何只从变量寄存器中获取月份规格?

+1

'sapply(strsplit(DF $ register_at, “\\ S”), “[”,2))' – emilliman5

+0

是'register_at'真正明确的或者是一个日期?或一个字符串? – G5W

+0

如果输入'sapply(last.reg_data,class)',你会得到什么? – G5W

回答

0

您应执行以下步骤:

  1. 设置您的区域设置为英语(如果你的机器的语言环境已经是英语,你可以跳过这一步!)
  2. 使用as.Date功能格式您的数据(请检查下面的格式字符串)
  3. 一旦数据是日期格式,只需从日期中提取月份部分。

示例代码:

#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) 
0

您可以使用substr函数,因为Month names始终处于相同的位置。

substr(df$register_at, 5, 7) 
+0

它正在工作。我的机器可能有些麻烦。我重新启动了我的个人电脑和R,它的工作非常完美。 谢谢 –

+0

@ P.Nitu,请将问题标记为已回答,如果它对您有帮助或至少是UP的话。 – AK47

0

为了将来的参考,我会尝试使用更标准化的格式(如年 - 月 - 日小时:分:秒)来写日期。

但是,我知道我们可能并不总是能够控制数据的格式(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来恢复到一个因素。

+0

我无法确定没有数据,但是看起来你可能正在从'factor'到'character'的一个变化是让所有的东西都变成'NA'? R有时会因为因素而变得繁琐。 –