Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SAS&x27;R中的数据输入错误_R_Read.table - Fatal编程技术网

SAS&x27;R中的数据输入错误

SAS&x27;R中的数据输入错误,r,read.table,R,Read.table,我有一个数据文件a,有7列,没有缺少的值,我将unix-joined添加到一个有28个字段的数据文件B中。结果文件是C。如果在B中找不到匹配项,则C中的输出行只有7列。如果B中有匹配项,则C中的输出行有35列。我已经尝试了加入的-e选项来填补28个字段的空缺,但没有成功 我试图做的是在R中复制SAS的misshoverinput语句。例如,下面的代码可以完美地工作: dat <- textConnection('x1,x2,x3,x4 1,2,"present","present"

我有一个数据文件a,有7列,没有缺少的值,我将unix-
join
ed添加到一个有28个字段的数据文件B中。结果文件是C。如果在B中找不到匹配项,则C中的输出行只有7列。如果B中有匹配项,则C中的输出行有35列。我已经尝试了加入
-e
选项来填补28个字段的空缺,但没有成功

我试图做的是在R中复制SAS的
misshover
input语句。例如,下面的代码可以完美地工作:

 dat <- textConnection('x1,x2,x3,x4
 1,2,"present","present"
 3,4
 5,6')

 df <- read.csv(dat, sep=',' , header=T , 
     colClasses = c("numeric" , "numeric", "character", "character"))

 > df
   x1 x2      x3      x4
 1  1  2 present present
 2  3  4                
 3  5  6   

第一行(C中标题后的第二行)实际上只有A中的那7个字段。在SAS中,我将使用
misshover
语句将所有这些尾部缺失字段设置为某个缺失值。我怎样才能在R中做到这一点?谢谢。

您可能正在寻找
read.table
(或其派生类
read.csv
)参数的
fill=TRUE
设置

  df <- read.table(dat, sep=',' , header=T , fill=TRUE,
      colClasses = c("numeric" , "numeric", "character", "character"))
 df
#
  x1 x2      x3      x4
1  1  2 present present
2  3  4                
3  5  6      
如果您在处理与每行项目数量不同相关的错误时遇到困难,那么使用
count.fields
非常有用。它接受与
read.table
使用的参数类似的参数。如果您有大量输入行,将调用包装到
表中的
count.fields
可能会很有用

length_tbl <- table( count.fields( 'C.tab' , header=TRUE , sep='\t', 
                                    quote="",
                                    comment.char="")
                     )

fill=TRUE
设置为
read.table
(或其派生表
read.csv
)的参数可能就是您要查找的

  df <- read.table(dat, sep=',' , header=T , fill=TRUE,
      colClasses = c("numeric" , "numeric", "character", "character"))
 df
#
  x1 x2      x3      x4
1  1  2 present present
2  3  4                
3  5  6      
如果您在处理与每行项目数量不同相关的错误时遇到困难,那么使用
count.fields
非常有用。它接受与
read.table
使用的参数类似的参数。如果您有大量输入行,将调用包装到
表中的
count.fields
可能会很有用

length_tbl <- table( count.fields( 'C.tab' , header=TRUE , sep='\t', 
                                    quote="",
                                    comment.char="")
                     )

我不能复制这个,这尤其困难,因为您没有提供造成此错误的
C.tab
文件的示例。这是客户名称和地址数据。模糊的描述并不构成错误。这些名称或地址中可能有一个具有
M'Cusik
O'Toole
或类似内容。它不一定是真正的客户姓名和地址。。。它只是代表你的用例,我不能复制它,这尤其困难,因为您没有提供造成此错误的
C.tab
文件的示例。这是客户名称和地址数据。模糊的描述并不构成错误。这些名称或地址中可能有一个具有
M'Cusik
O'Toole
或类似内容。它不一定是真正的客户姓名和地址。。。它只需要表示您的用例。它们有
fill=T
,这(我知道您知道)是不一样的。我在代码中输入了TRUE,同样的结果。我希望
fill=TRUE
能做到这一点,设置
comment.char=”“
以防地址包含“#”。如果大家一致认为fill是可以使用的选项,那么我似乎在寻找特殊字符。需要担心的“特殊字符”是
'
”和
#
。查看count.fields函数以获得一个句柄。我发现
表(count.fields(…)
是一种确定各种读取参数组合效果的简洁方法。@dwn您可以在答案中加入
count.fields
建议。它们有
fill=T
,这(据我所知,您确实知道)不一样。我在代码中输入了TRUE,结果是一样的。我希望
fill=TRUE
能做到这一点,设置
comment.char=“”
,以防万一地址包含“#”。如果一致认为fill是可以使用的选项,那么我似乎在寻找特殊字符。“特殊字符”“要担心的是
”和
#
。请查看count.fields函数来处理这个问题。我发现
表(count.fields(…)
是确定各种读取参数组合的效果的一种简洁方法。@DWin您可以在答案中加入
count.fields
建议。
bad_lines <- which( count.fields( 'C.tab' , header=TRUE , sep='\t', 
                                    quote="",
                                    comment.char="")
                     != 7  # or whatever is the "correct" length
                     )