This is what the last approach does: to restore the G values we average the four surrounding G photosites, and for the B values we just average the two closes neighbours, located 2 columns away left and right:
The compact R code:
# METHOD 2
# B photosites
i=which(!col(img)%%8 & !row(img)%%2)
img[i]=(img[i-2*NROW]+img[i+2*NROW])/2
# G photosites
i=which(!col(img)%%8 & row(img)%%2)
img[i]=(img[i-NROW-1]+img[i-NROW+1]+img[i+NROW-1]+img[i+NROW+1])/4
About the defective columns, they still hold some information but impossible to recover due to severe underexposure and blooming:
It looks like as if the Canon 7D would have 8 separate circuits to perform the sensor readout, and one of them failed.
Regards