return data.frame