This is a fairly broad question, so I expect there may be follow-up questions.
I have a fairly large opinion survey data set (about 40k rows, 40 columns) with many NA's (a couple variables have 40% NA). It is also historical data, so it is an aggregate of more than 50 years of surveys. There are few questions that have been asked on every survey, so I'm looking into imputation to allow for further analysis. (With the understanding that I will lose accuracy)
There may also be a few reasons underlying the missingness, although I suspect it's not far from random. Some missing data is from survey questions that were not asked in some years, although there are few "issue" type questions that may have changed over time, so I'm not too concerned here (plus I am using "year" as a dependent variable). Another reason for missingness is that the person refused to answer the question -- there may be some underlying characteristics here, but I'm not convinced it's something I need to control for during the imputation, although if others disagree, I'd absolutely be open to your thoughts.
I'm wondering if anyone can suggest best practices for moving forward, such as what type of algorithm to use. I've used R so far, but I'd be willing to move to Python for this task if it was quicker/better for any reason. Much Appreciated.