楼主: melody21
2990 6

[问答] R读取固定宽度TXT文件里的部分变量 read_fwf 出错==5 楼上传样本数据及问题描述 [推广有奖]

  • 4关注
  • 6粉丝

已卖:5份资源

讲师

49%

还不是VIP/贵宾

-

威望
0
论坛币
3199 个
通用积分
462.0354
学术水平
36 点
热心指数
48 点
信用等级
36 点
经验
138 点
帖子
349
精华
0
在线时间
544 小时
注册时间
2007-7-14
最后登录
2023-2-4

楼主
melody21 发表于 2016-3-17 00:26:50 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
外部文件:固定宽度的TXT文件,1m数据,1000+变量,没有变量名行。读取要求:尝试用read_fwf读入3个变量,按照其字段位置: seqnumber: 195-204;cell_cd:205-207; ms_flag:4073-4074
code:
test2<-read_fwf("samplefile.TXT",na = c("", "NA"),fwf_positions(c(195,205,4073),c(204,207,4074),col_names=c("seqnumber","cell_cd","ms_flag")))


根据数据,msflag理应只有2个字段(4073-4074),但输出如下:
min(test2$ms_flag)
[1] "0000000000000000000000000000000000000000000000000119581048713051110740835114128                                                                                                                                                                                                              UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU


不知道怎么理解。
谢谢。
二维码

扫码加我 拉你入群

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

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

关键词:READ 样本数据 样本数 txt EAD 样本

已有 1 人评分经验 收起 理由
李会超 + 80 很好的问题

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

沙发
jiangbeilu 学生认证  发表于 2016-3-17 09:56:28
上传数据才好去试验一下你的代码哈

藤椅
melody21 发表于 2016-3-24 23:08:02
jiangbeilu 发表于 2016-3-17 09:56
上传数据才好去试验一下你的代码哈
谢谢回复。 数据是保密性质的,所以没办法上传。其实主要问题是,要依靠字段起始位置,输入固定宽度TXT文件里的部分变量,用read_fwf怎么读?试过了好几个文件,都有出错。这个函数对字段的缺省值是怎么处理的?除了这个函数,还有哪些函数更有效?

我主要想在R里面实现SAS的 infile  input 功能:
data sample;
infile 'data location' missover lrecl=5000;
input
seqnumber 195-204
cell_cd 205-207
mf_flag $4073-4074

run;

SAS里读取这样的文件,高效又准确,同时还可以确定每个变量的数据类型。
特别想知道,要实现类似功能, R里面可以如何做?

谢谢。

板凳
jiangbeilu 学生认证  发表于 2016-3-25 08:07:12
不好意思,文件的基本类型都没有看到,不清楚你的具体要求。
read.table等函数里有colClasses 参数可以设置

报纸
melody21 发表于 2016-3-30 04:03:28
test.txt (4 KB)

谢谢楼上朋友的回复。我随机模拟了4行样本数据,跟原数据的数据文件/变量值/缺省值情况是一模一样的。数据是没有变量头的,所以会单独有一个索引文件交待各变量的起始位置,含义,变量类型等,这个暂且不表。
先说说我们通常的做法:利用SAS,infile input 函数, 如以下 ( 比如:数据位置从46-60 是变量NO的值,该值是数字型变量;
而61-64属于变量NUMBER,该变量为文本型变量 , 这些都是根据索引文件来的)。

data qq;
infile 'QM\test.txt' missover lrecl=1500;
input

NO              46   -    60

NUMBER          $    61   -    64

TYPE       $    65   -    67

DATE       $    68   -    77

SCODE      $    78   -    81

CODE       $    82   -    84

RPTYPE          $    85   -    87

RP         $    88   -    90

RPT        $    91   -    92

ZIP        $    93   -    97

MM_E       $    98   -    99

MM_C       $    100  -    109

MM_C       $    110  -    117

CA         $    118  -    185

TU_S       $    354  -    356

TU_ST      $    357  -    359

TU_A       $    360  -    369

TU_F       $    370  -    469

QM_M       $    470  -    471

QM_F       $    472  -    580

QUOT $    581  -    590

QUOTS      $    591  -    592

QUOT_P          $    593  -    602

QUOT_ZP         $    603  -    612

CREAD      $    613  -    628

DATE_F          $    629  -    638

STAT       $    639  -    667

REM        $    668  -    683

CAM        $    684  -    729

LO   $    730  -    739

AG         $    740  -    742

MED        $    743  -    762

LIST_N          $    763  -    773

LIST_R          $    774  -    784

CP_ID      $    785  -    793

LETTER          $    794  -    801

ORDER      $    802  -    809

C_IND      $    810  -    810

SUBTIME         $    811  -    826

REP_TXT         $    827  -    875

INAMT      $    876  -    881

FT_NR      $    882  -    882

ES_NR      $    883  -    883

HT_NR      $    884  -    884

OR_CDE          $    885  -    920

DER        $    921  -    927

AG              928  -    929

SE         $    930  -    943

VER        $    944  -    951

E_IND      $    952  -    952

I_IND      $    953  -    953

Y_IND      $    954  -    954

C_IND      $    955  -    955

RE_IND          $    956  -    956

ST_IND          $    957  -    957

ER_IND          $    958  -    958

RA_IND          $    959  -    959

RESNM      $    960  -    973

PRE        $    974  -    980

REF_ID          $    981  -    988

SU_ID      $    989  -    995

PRE_NT          $    996  -    1007

PRE_CY     $          1008 -    1010

ESC  $          1011 -    1060

MPD_NR          $    1061 -    1062


OS_DT      $    1063 -    1072


run;
所以我的问题是,如果要在R中复制这块SAS code的功能如何实现?

这个样本属于比较小的数据,只有数十个变量,通常需要处理的文件多达4000-5000个变量,这时SAS infile, input 的优势就变得特别明显,不管是全部输入5000个变量,还是只输入其中的10个变量,只要通过变换: 变量名 $(or blank) 变量起始值位置 - 变量终值位置 就可以了。
例如,下面的code输入的数据集只有该文件中的 PRE_NTPRE_CYESCMPD_NROS_DT,这5个变量。
data qq2;
infile 'QM\test.txt' missover lrecl=1500;
input

PRE_NT          $    996  -    1007

PRE_CY     $          1008 -    1010

ESC  $          1011 -    1060

MPD_NR          $    1061 -    1062


OS_DT      $    1063 -    1072


run;

不知道我的问题表述清楚了没有。还请各位赐教!
谢谢!

地板
melody21 发表于 2016-3-31 22:22:03
踢一下。

7
melody21 发表于 2016-4-4 22:23:28
再踢一下

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-20 05:21