In the R database, you can use suband split.default, like this, to return a list of data.frames:
myDfList <- split.default(dat, sub("_\\d+", "", names(dat)))
it returns
myDfList
$block
block_001 block_002
1 0.40 0.006
2 0.56 0.400
$file
file_001 file_002
1 0.05 0.20
2 0.01 0.87
$red
red_001 red_002
1 0.05 0.30
2 0.12 0.06
split.default data.frames . sub "_\d +", , , "block", "file" "red".
, lapply. . Gregor .