SAS&x27;R中的数据输入错误
我有一个数据文件a,有7列,没有缺少的值,我将unix-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"
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
)