Вот милая маленькая строчка:
> df <- data.frame(Price1 = c(NA, 100, 34),
+ Price2 = c(101, 108, 33),
+ Price3 = c(103, 78, NA),
+ Price4 = c(114, 99, 78))
> df
Price1 Price2 Price3 Price4
1 NA 101 103 114
2 100 108 78 99
3 34 33 NA 78
> df <- ifelse(is.na(df), rowMeans(df, na.rm=TRUE), unlist(df))
> df
Price1 Price2 Price3 Price4
[1,] 106 101 103.00000 114
[2,] 100 108 78.00000 99
[3,] 34 33 48.33333 78
РЕДАКТИРОВАТЬ: для @Charlie, который спросил, как бы вы заменили NA на столбцы, вы можете использовать то же самое, но заменить rowMeans (...) на вектор, повторяющий столбец, означает:
df <- ifelse(is.na(df), rep(colMeans(df, na.rm=TRUE), rep(nrow(df), ncol(df))),
unlist(df))
или применить ifelse к каждому столбцу списка:
df <- sapply(df, function(x)ifelse(is.na(x), mean(x, na.rm=TRUE), x))