我正在尝试从网站中提取值。提取的值看起来像这样。
"3000 ---- ---- ---- ---- '1 UNCH '1"
"4600 ---- ---- ---- ---- '1 UNCH '1"
"4800 ---- ---- ---- ---- '1 UNCH '1"
"5000 ---- ---- ---- ---- '1 UNCH '1 300"
"5200 ---- ---- ---- ---- '1 UNCH '1"
"5400 ---- ---- ---- ---- '1 UNCH '1"
"5600 ---- ---- ---- ---- '1 UNCH '1 10"
"5800 ---- ---- ---- ---- '1 UNCH '1 1"
"6000 ---- ---- ---- ---- '1 UNCH '1 5461"
"6200 ---- ---- ---- ---- '1 UNCH '1 54"
"6400 ---- ---- ---- ---- '1 UNCH '1 2009"
"6600 ---- ---- ---- ---- '1 UNCH '1 124"
"6800 ---- ---- ---- ---- '1 UNCH '1 410"
"7000 ---- ---- ---- ---- '1 -'1 '2 10704"
"7200 ---- ---- '2A ---- '2 -'1 '3 9927"
"7400 ---- ---- ---- ---- '3 UNCH '3 7869"
"7600 ---- ---- ---- ---- '4 UNCH '4 30 13596"
"7800 ---- ---- ---- ---- '5 -'1 '6 109 16030"
"8000 '7 '7 '7 '7 '7 -'1 467 1'0 731 26912"
"8200 1'4 1'4 1'3 ---- 1'2 -'2 119 1'4 222 11030"
"8400 2'2 2'2 2'0 2'0 1'7 -'4 426 2'3 172 15743"
"8600 3'1 3'3 2'7 3'0A 3'0 -'4 66 3'4 330 18964"
有些行的列值较少。我想创建一个11列的数据框,空白的值应保持为空。当我尝试根据空间分割值时,具有较少列值的行会重叠并重复。请找到我尝试过的代码。
cc=gsub("\\s+"," ",df)
cc=data.frame(cc)
cc = data.frame(do.call('rbind', strsplit(as.character(cc),' ',fixed=TRUE)))
答案 0 :(得分:3)
更新,原始问题已更改。
您的数据看起来像是固定宽度格式。您可以使用this.reportViewer1.LocalReport.ReportPath = "yourReportFileName.rdlc";
,但它的使用在某种程度上取决于您的数据源的可靠性。如果您从中获取数据的地方有关于如何始终格式化数据的规范(例如“11列,每行10个字符”),那将会有所帮助。
?read.fwf
我选择的宽度适合您提供的数据;你必须根据自己的期望为自己确定合理的价值观。
您可以使用索引将NAs放入空白点,例如# pad out each line to the same length
maxlen <- max(sapply(df, nchar)) # it's 110 for your data, it seems
df <- sprintf(paste0("%-", maxlen, "s"), df)
read.fwf(textConnection(df),
widths=c(4, 11, 10, 10, 11, 9, 8, 12, 11, 12, 12))
将选择前9个元素((1:9)[1:11]
),然后在末尾添加两个1:9
,将其填充为11个元素。
NA
答案 1 :(得分:0)
您可以尝试使用列中的恒定距离,每列覆盖字符start:end。如果末尾缺少列,则NA将填充到列中。 变量“line”包含提取文件的一行。
start <- c(1,6,17, 27,37,47,57,65,77,88,100)
end <- c(5,16,26,36,46,56,64,76,87,99,110)
columns <- list()
for(j in 1:length(start)){
if(start[j] <= nchar(line)){
columns[[j]] <- substr(line, start[j],end[j])
}
else{
y[[j]] <- NA
}
}