• R语言
  • 请问如何验证字段的正确性呢,比如长度等

对于数据框,需要先验证各个变量录入是否符合规定,应该怎么检测呢?

比如已经明确规定以下条件:

1、企业代码是15位数字

2、企业贷款是否违约分别用FS1,FS2来表示

3、贷款利率是0.25-6.55之间的数

那么这些变量的观测数据是否合规,应该怎样检测呢?

P.s对于第1个,我想了用字段宽度来检测,选择widths,但是系统提示没有这个函数?

我是个初学者,很多基础比较差,又不知道该在哪里找,而这个任务又比较着急,所以烦请大侠救助了啊[s:19]

1、企业代码是15位数字

length(grep("^\\d+$",xxx)) & nchar(xxx)==15

2、企业贷款是否违约分别用FS1,FS2来表示

yyy %in% c('FS1','FS2')

3、贷款利率是0.25-6.55之间的数

zzz>=0.25 & zzz<=6.55

回复 第3楼 的 luzifer:哇 太感谢了 。能追问一下吗?对于上面的情况,我想让R列出有问题的观测,比如企业代码不合规的企业的nrow(或者更有标志性的:如利率不合规的企业代码——因为代码是唯一标识)

,应该怎么做呢?[s:19]

还有另外一个问题,烦请再给解答一下噻?

用read.table读入形如00005486215|C11199|jingguo|2000-07-01的数据:

----------------------------------------------------------------------------------------

1、有一列数据为日期(如2000-07-01),有的行是缺失的,读入R后显示缺失值处显示空白,而不是NA,试过na.strings="XXXXX"也不行,不知道是为什么,且如何处理让其显示为“NA”或者“XXXXX”形式?

2、第一列形如00005486215的变量,读入后显示为如5.4+2e的科学计数,就是前面的四个0000消失了,而且数据格式发生了变化。这本身是个企业代码的,不应该这么处理。我也尝试过把这个变量的类设置为charactor,但是出来后显示是5486251,也就是前面的00000还是消失了。

请问这个该是怎么处理捏?

回复 第3楼 的 luzifer:拜托啦,很着急哦。或者能告诉我在哪里能找到相关内容呢。[s:19]


</p>

我想让R列出有问题的观测

方法很多,可以先看下subset函数,把3楼 所列的条件用逻辑操作符(&, | )连接起来。另外我觉得3楼 的第一条里的式子不够直观,可以改成:

<br />
grepl(xxx, pattern = "^\\d{15}$")<br />
</p>

[data]

00005486215|C11199|jingguo|2000-07-01

[/data]

读这种形式的数据的时候,我想你已经设置sep="|"了吧?

有的行是缺失的,读入R后显示缺失值处显示空白

我猜,那个地方可能真的是若干个空白字符,两个|字符间可能有空白字符的存在,你再检查下数据?

读入后显示为如5.4+2e的科学计数,就是前面的四个0000消失了

这是你在读取的时候,没有设置列数据类型。这样R就会自动猜测数据类型。它长的像数字,所以就转成了numeric。

我也尝试过把这个变量的类设置为charactor

我猜你是尝试把那些科学计数法的数字转成字符串吧? 这不可能转成你想要的样子的,除非用sprintf或者gettextf函数,以字符串形式格式化输出。

但更推荐的还是在读取的时候,指定列数据类型,强制设置那列为字符串类型,请参考read.table的colClasses参数。