楼主: BIG钊钊
9702 8

[问答] 【求助】筛选数据出了问题 [推广有奖]

  • 0关注
  • 7粉丝

已卖:831份资源

副教授

64%

还不是VIP/贵宾

-

威望
1
论坛币
17361 个
通用积分
98.0706
学术水平
37 点
热心指数
47 点
信用等级
30 点
经验
5326 点
帖子
528
精华
0
在线时间
720 小时
注册时间
2012-1-24
最后登录
2025-11-2

楼主
BIG钊钊 学生认证  发表于 2015-11-20 05:31:58 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我现在有个表格,目前一步一步地筛选,到SICCD这个地方卡住了。
Capture.PNG


  1. dataset <- read.csv(choose.files(), header = T)
复制代码


我第一步选出share code为10和11的公司,用了下面的命令:
  1. subdata1 <- subset(dataset, dataset$SHRCD == c(10,11))
复制代码

然后我选择年份范围,命令如下(如果有知道像这种年份怎么根据头四位年份筛选的,望指教)
  1. subdata2 <- subset(subdata1, subdata1¥DATE>20081231 & subdata1$DATE<20140101)
复制代码
此处两个$之间的东西在帖子里总变,暂时不知道怎么弄,就把第一个$换成¥,code里还是$哈~

接下来我有筛选了一下交易所代码为1的公司,并且去掉了SIC code缺失的数据:

  1. subdata3 <- subset(subdata2, subdata2$EXCHCD == 1)
  2. subdata4 <- subset(subdata3, subdata3$SICCD!="NA")
复制代码



最后我想去掉utility和finance公司,即SIC开头为40-49,52-59的公司:
  1. subdata5 <- subset(subdata4, subdata4$SICCD!= c(4000:4999,5200:5900))
复制代码

然后这个命令就出错了
  1. Warning message:
  2. In subdata4$SICCD != c(4000:4999, 5200:5900) :
  3.   longer object length is not a multiple of shorter object length
复制代码

我又试了一下subdata2那种形式的命令,也是这个错误,希望大家给我指导指导。
subdata5 <- subdata4[(subdata4$SICCD<4000)&(subdata4$SICCD>4999),]这种形式出来的是0 observation。。。

另外这种通过特定部分的字符筛选数据有没有什么简便的方法?例如20000101-20151231的日期里,只选择第五位是1第六位是0,即所有的10月,留下20001001,20001002...

二维码

扫码加我 拉你入群

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

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

关键词:筛选数据 dataset siccd DataS Data finance 交易所 share

本帖被以下文库推荐

沙发
BIG钊钊 学生认证  发表于 2015-11-20 05:43:38
@求证1加1

藤椅
万人往LVR 在职认证  发表于 2015-11-20 08:47:32
A!=B 换成 A %in% B==F
substr('777888',2,4)
已有 2 人评分经验 论坛币 学术水平 热心指数 收起 理由
李会超 + 40 热心帮助其他会员
BIG钊钊 + 5 + 3 + 3 精彩帖子

总评分: 经验 + 40  论坛币 + 5  学术水平 + 3  热心指数 + 3   查看全部评分

板凳
BIG钊钊 学生认证  发表于 2015-11-20 10:53:58
万人往LVR 发表于 2015-11-20 08:47
A!=B 换成 A %in% B==F
substr('777888',2,4)
这个F就是c()么?

报纸
BIG钊钊 学生认证  发表于 2015-11-20 10:59:15
万人往LVR 发表于 2015-11-20 08:47
A!=B 换成 A %in% B==F
substr('777888',2,4)
我试出来了,明白你的意思了
我把最后的code写成了
subdata5 <- subset(subdata4,subdata4$SICCD %in% c(4000:4999, 6000:6700) == F)

那么为什么我之前subdata2就能出来,换成subdata5就不行了呢?

地板
万人往LVR 在职认证  发表于 2015-11-20 11:38:28
1!=c(1,2,3)
1 %in% c(1,2,3)==F

7
BIG钊钊 学生认证  发表于 2015-11-20 12:42:02
万人往LVR 发表于 2015-11-20 11:38
1!=c(1,2,3)
1 %in% c(1,2,3)==F
我刚才又验证了一下,我那个==c(10,11)出来的结果也比您的这个少好多,相当于丢失了好多数据,能否告知我原来的做法到底为啥错了呢?

8
万人往LVR 在职认证  发表于 2015-11-20 13:23:27
对于subset第二个参数来说,实质是TRUE和FALSE的组合,例如
subdata3 <- subset(subdata2, subdata2$EXCHCD == 1)
第二个参数实际是类似 [1] TRUE TRUE FALSE FALSE TRUE...的向量,每个TRUE/FALSE代表EXCHCD对应元素是否等于1,但要是把1换成长度大于1的向量就出问题了。

1:5==1  ##比较每个元素是否是1,实际上是因为左侧长度是5,右侧长度是1,所以右侧元素循环使用,即1,2,3,4,5与1,1,1,1,1对应位置比较是否相同。
1:5==1:3  ##前三次比较分别用两侧对应的前三位比较,结果都是TRUE,到了第四位,右侧因为只有3个元素,所以循环使用,最后相当于1,2,3,4,5与1,2,3,1,2对应位置比较是否相同。这种比较和你程序里写的“包含”意思完全不同

9
BIG钊钊 学生认证  发表于 2015-11-20 14:01:52 来自手机
万人往LVR 发表于 2015-11-20 13:23
对于subset第二个参数来说,实质是TRUE和FALSE的组合,例如
subdata3
十分感谢!涨知识啦!

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-2 11:11