#Separate breakdown list and original data frame into different objects df <- ex_df$report$data breakdown_list <- df$breakdown df$breakdown <- NULL #Loop over df and accumulate results parsed_df <- data.frame() for(i in 1:nrow(df)){ right_df <- breakdown_list[[i]] right_df <- rename(right_df, replace=c("name" = report_raw$report$elements$id[2])) temp <- cbind(df[i,],right_df, row.names = NULL) parsed_df <- rbind(parsed_df, temp) } parsed_df <- rename(parsed_df, replace=c("counts" = report_raw$report$metrics$id))