楼主: bayes
10857 12

[问答] 如何分割一个数据框? [推广有奖]

  • 1关注
  • 0粉丝

博士生

20%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
1 点
热心指数
0 点
信用等级
0 点
经验
1172 点
帖子
78
精华
0
在线时间
419 小时
注册时间
2005-11-5
最后登录
2021-11-14

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
有个数据集,已经存为RData格式。load以后,想根据其中一列的值,分为两个数据集,不知道用什么函数合适。比如有一列是日期,例如“2000.10.10”,字符型。想根据这一列得到年份,然后2000年以前的作为一个数据集,之后的另外放一个数据集,请问该怎么处理?

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

扫码加我 拉你入群

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

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

关键词:数据框 numeric Rdata格式 SUBSTR split 分割 数据 如何

你的名字在这看http://xufeiyy.com/detail/?45958.html
沙发
qoiqpwqr 发表于 2012-5-26 01:29:23 |只看作者 |坛友微信交流群
strptime('2000.10.10', '%Y.%m.%d')$year
已有 1 人评分经验 收起 理由
ltx5151 + 20 学习了

总评分: 经验 + 20   查看全部评分

使用道具

藤椅
bayes 发表于 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的方法的时候,最终也是遇到这个错误,不知道问题何在,请斑竹指点下。
你的名字在这看http://xufeiyy.com/detail/?45958.html

使用道具

板凳
qoiqpwqr 发表于 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, ]

使用道具

报纸
bayes 发表于 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后面的这个逗号上。貌似没逗号就会有问题,请问下斑竹,这是为啥?
你的名字在这看http://xufeiyy.com/detail/?45958.html

使用道具

地板
bayes 发表于 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之后的逗号闹得?
你的名字在这看http://xufeiyy.com/detail/?45958.html

使用道具

7
qoiqpwqr 发表于 2012-5-27 04:54:28 |只看作者 |坛友微信交流群
bayes 发表于 2012-5-26 23:35
又发现了新问题,就是在data1
可不可以把数据和你的程序发上来看看。

使用道具

8
bayes 发表于 2012-5-27 10:11:56 |只看作者 |坛友微信交流群
qoiqpwqr 发表于 2012-5-27 04:54
可不可以把数据和你的程序发上来看看。
程序如下:
load("PatentTotal.RData")
year <- strptime(PatentTotal$publication_date, '%Y.%m.%d')$year
Patent1 <- PatentTotal[year <= 85,]


数据是原始的csv,我自己其实先有个程序把它存成了PatentTotal.RData,所以这里用的load

1985.rar

53.12 KB

本附件包括:

  • 1985.csv

你的名字在这看http://xufeiyy.com/detail/?45958.html

使用道具

9
qoiqpwqr 发表于 2012-5-27 19:48:26 |只看作者 |坛友微信交流群
bayes 发表于 2012-5-27 10:11
程序如下:
load("PatentTotal.RData")
year
应该不会有问题的呀。那个逗号是必须的,因为你是要按行选取。

试试
data <- read.csv("yourfile.csv", header = TRUE)
year <- strptime(data$publication_date, '%Y.%m.%d')$year
data1 <- data[year <= 100, ]

使用道具

10
bayes 发表于 2012-5-28 01:54:29 |只看作者 |坛友微信交流群
qoiqpwqr 发表于 2012-5-27 19:48
应该不会有问题的呀。那个逗号是必须的,因为你是要按行选取。

试试
检查了一下,发现压根就不是程序问题,是数据中有些异常导致的。。。
汗一个。。。
谢谢斑竹了~
你的名字在这看http://xufeiyy.com/detail/?45958.html

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-14 08:05