A general error analysis for randomized low-rank approximation with application to data assimilation