Let me draw out a point which others have implied:
You only need enough RAM to fit the largest single chunk of data you want to operate on in R.
You list a number of tasks:
- Summarize time series entries into smaller units (e.g. monthly data into quarters)
- calculate percentages, ratios, year-over-year growth rates
- various types of joins on the data coming from multiple csv files
- after joining, nest by variables to create one or more list-columns
- apply linear regression modeling on the list-columns (inspired by https://r4ds.had.co.nz/many-models.html)
- create charts with ggplot. I anticipate creating a library of about 1,000
Everything there except the regression and the plots are operations that are well suited for a database. If it were me, I would use R to build an ETL process to push all the data into a database. I'd start with Postgres on my local machine because that's easy. If that were not performant then I would move the data to Redshift on Amazon AWS.
Then I would do all my joins and simple percentages using R and dplyr against the database. That means you write dplyr code in R but the logic gets executed in the database. Read more about that here.
Then I would go about figuring out how big the largest "chunk" of the data is that I want to work on. I'd do that by pulling only the records and fields from the DB that I need for one single regression into R and measuring how big the resulting data frame is by using pryr::object_size on each chunk. Then I'd replace that chunk and pull the next chunk from the DB. It may be that no single chunk is bigger than a few hundred MB. In which case you could comfortably process all your data on a moderate laptop.
One word of caution: You seem to have already decided on the use of list columns. That's premature given that you do not even have a workflow for your data conceived. Don't start with a method and then rework your workflow so that the method is possible. Start with a workflow then use the methods that work for your situation.