全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
11453 12
2012-05-26
有个数据集,已经存为RData格式。load以后,想根据其中一列的值,分为两个数据集,不知道用什么函数合适。比如有一列是日期,例如“2000.10.10”,字符型。想根据这一列得到年份,然后2000年以前的作为一个数据集,之后的另外放一个数据集,请问该怎么处理?

函数split可以分割,但是需要一个因子水平的变量,用年份那就不知道分成多少个了,而我只需要2个。
然后这个字符型的日期,怎么提取年份呢?简单的substr+as.numeric当然可以,但是我的数据集特别大,行数多,循环就累死了。想把整个数据集作为矩阵来处理,就搞不定了。
如果用as.Date来变为日期类型,似乎又不知道怎么提取年份了,请高手指点~
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2012-5-26 01:29:23
strptime('2000.10.10', '%Y.%m.%d')$year
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-5-26 16:08:42
qoiqpwqr 发表于 2012-5-26 01:29
as.POSIXlt(strptime('2000.10.10', '%Y.%m.%d'))$year
谢谢斑竹。
貌似最外层的as.POSIXlt可以不用,因为strptime返回的就是POSIXlt?

另外我这样赋值给一个变量
x <- strptime('2000.10.10', '%Y.%m.%d')$year
然后再分割的时候就出问题了。我是这样分割的:
data1 <- data[x<=100]  #2000年以前的
错误提示是:
Error in `[.data.frame`(data, x <= 100) :
  undefined columns selected
一开始我用substr+as.numeric的方法的时候,最终也是遇到这个错误,不知道问题何在,请斑竹指点下。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-5-26 18:46:23
bayes 发表于 2012-5-26 16:08
谢谢斑竹。
貌似最外层的as.POSIXlt可以不用,因为strptime返回的就是POSIXlt?
你说的没错,直接strptime就可以了。

你执行完x <- strptime('2000.10.10', '%Y.%m.%d')$year后,x只是一个数值=100。做分割的话你要先找出所有时间所对应的年份,然后再data1 <- data[x<=100, ]
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-5-26 23:06:21
qoiqpwqr 发表于 2012-5-26 18:46
你说的没错,直接strptime就可以了。

你执行完x
哦,是我上面写错了。我当时的赋值,本来就是像:
x <- strptime(data$date, '%Y.%m.%d')$year
因此得到的本事就应该是一个年份的向量了吧。然后再
data1 <- data[x<=100, ]
就ok了,问题就出在x<=100后面的这个逗号上。貌似没逗号就会有问题,请问下斑竹,这是为啥?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-5-26 23:35:31
又发现了新问题,就是在data1 <- data[x<=100, ]之后
产生的data1的第一列,叫row.name,是不是只是因为我用rstudio的原因?查看的时候就多出一列了?原版的data数据集没这个问题啊~
还有就是,不知道为啥,莫名其妙的就多出了几十行,row.name是na,na.1, na.2, ...然后观察值全部都是na,不知道怎么回事。。。是不是还是那个x<100之后的逗号闹得?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群