Решение с использованием базы R. Вручную разбивает строку, поскольку дефис не является допустимым разделителем (может быть отрицательным числом), а пробел не является согласованным разделителем (поскольку в столбце «пар» могут быть пробелы, когда они действительны, и ни один, если нет).
c.names <- c("Gap", "Fr", "Pairs", "Mdk")
string <- c("1 0.00020 1 - 25 2.54124\r\n 2 0.00029 2 - 26 2.54125\r\n 3 0.00020 3 - 27 2.54116\r\n 26 -0.00008 - -\r\n 27 -0.00007 - -\r\n 28 -0.00009 - -\r\n")
lines <- scan(text=string,what=character(),sep="\n")
df <- lapply(lines,function(line) {
line <- trimws(line)
breaks <- unlist(gregexpr("\\s+",line))
gap <- trimws(substr(x=line,start=1,stop=breaks[1]))
fr <- trimws(substr(x=line,start=breaks[1],stop=breaks[2]))
pairs <- trimws(substr(x=line,start=breaks[2],stop=breaks[length(breaks)]))
mdk <- trimws(substr(x=line,start=breaks[length(breaks)],stop=nchar(line)))
data.frame(gap=gap,fr=fr,pairs=pairs,mdk=mdk)
})
df <- do.call("rbind",df)
> df
gap fr pairs mdk
1 1 0.00020 1 - 25 2.54124
2 2 0.00029 2 - 26 2.54125
3 3 0.00020 3 - 27 2.54116
4 26 -0.00008 - -
5 27 -0.00007 - -
6 28 -0.00009 - -