Skip to content
Prev 309750 / 398506 Next

Replacing NAs in long format

+  1       8    0
+  1       9    1
+  1      10   NA
+  2       4   NA
+  2       5   -1
+  2       6    0
+  2       7    1
+  2       8    2
+  2       9    3
+  2      10    4
+  2      11   NA
+  2      12    6
+  3       4   NA
+  3       5   -2
+  3       6   -1
+  3       7    0
+  3       8    1
+  3       9    2
+  3      10    3
+  3      11   NA", header = TRUE)
+     # check for all NAs -- just return indeterminate state
+     if (sum(is.na(.idr$year)) == nrow(.idr)) return(.idr)
+     # repeat until all NAs have been fixed; takes care of contiguous ones
+     while (any(is.na(.idr$year))){
+         # find all the NAs
+         for (i in which(is.na(.idr$year))){
+             if ((i == 1L) && (!is.na(.idr$year[i + 1L]))){
+                 .idr$year[i] <- .idr$year[i + 1L] - 1
+             } else if ((i > 1L) && (!is.na(.idr$year[i - 1L]))){
+                 .idr$year[i] <- .idr$year[i - 1L] + 1
+             } else if ((i < nrow(.idr)) && (!is.na(.idr$year[i + 1L]))){
+                 .idr$year[i] <- .idr$year[i + 1L] -1
+             }
+         }
+     }
+     return(.idr)
+ })
idr schyear year
1.1    1       8    0
1.2    1       9    1
1.3    1      10    2
2.4    2       4   -2
2.5    2       5   -1
2.6    2       6    0
2.7    2       7    1
2.8    2       8    2
2.9    2       9    3
2.10   2      10    4
2.11   2      11    5
2.12   2      12    6
3.13   3       4   -3
3.14   3       5   -2
3.15   3       6   -1
3.16   3       7    0
3.17   3       8    1
3.18   3       9    2
3.19   3      10    3
3.20   3      11    4
On Sat, Nov 3, 2012 at 1:14 PM, Christopher Desjardins
<cddesjardins at gmail.com> wrote: