用最后一个不是 NA 的值填充 NA 列值(na.locf by column)

Fill in NA column values with the last value that was not NA (na.locf by column)

我正在清理我的数据,dput 如下所示。

DF <- structure(list(toberevised = c("[Money amounts are in thousands of dollars]", 
NA, NA, NA, "Item", NA, NA, NA, NA, "Number of returns", "Number of joint returns", 
"Number with paid preparer's signature", "Number of exemptions", 
"Adjusted gross income (AGI) [3]", "Salaries and wages in AGI: [4] Number", 
"Salaries and wages in AGI: Amount", "Taxable interest:  Number", 
"Taxable interest: Amount", "Ordinary dividends:  Number", "Ordinary dividends: Amount"
), ...2 = c("UNITED STATES [2]", NA, NA, NA, "All returns", NA, 
NA, "1", NA, "135257620", "52607676", "80455243", "273738434", 
"7364640131", "114060887", "5161583318", "59553985", "161324824", 
"31158675", "164247298"), ...3 = c(NA, NA, NA, NA, "Under", ",000 [1]", 
NA, "2", NA, "92150166", "20743943", "53622647", "159649737", 
"1797097083", "75422766", "1541276272", "28527550", "39043002", 
"13174923", "23867893"), ...4 = c(NA, NA, "Size of adjusted gross income", 
NA, "50000", "under", "75000", "3", NA, "18221115", "11329459", 
"11025624", "44189517", "1119634632", "16299827", "896339313", 
"10891905", "16353293", "5255958", "12810282"), ...5 = c(NA, 
NA, NA, NA, "75000", "under", "100000", "4", NA, "10499106", 
"8296546", "6260725", "28555195", "905336768", "9520214", "721137490", 
"7636612", "12852148", "4095938", "11524298"), ...6 = c(NA, NA, 
NA, NA, "100000", "under", "200000", "5", NA, "10797979", "9193700", 
"6678965", "30919226", "1429575727", "9782173", "1083175205", 
"9092673", "23160862", "5824522", "25842394"), ...7 = c(NA, NA, 
NA, NA, "200000", "or more", NA, "6", NA, "3589254", "3044028", 
"2867282", "10424759", "2112995921", "3035907", "919655038", 
"3405245", "69915518", "2807334", "90202431")), row.names = c(NA, 
-20L), class = c("tbl_df", "tbl", "data.frame"))

在第一行和第三行中,我想使用 zoo 中的 na.locf 之类的东西,但不是在行上而是在列上,这样 DF 就变成了。

DF[1,3:7] <- "UNITED STATES [2]"
DF[1,5:7] <- "Size of adjusted gross income"

按行应用na.locf

DF[] <- t(apply(DF, 1, zoo::na.locf, na.rm = FALSE))
DF
# A tibble: 20 x 7
#   toberevised               ...2       ...3       ...4            ...5            ...6            ...7          
#   <chr>                     <chr>      <chr>      <chr>           <chr>           <chr>           <chr>         
# 1 [Money amounts are in th… UNITED ST… UNITED ST… UNITED STATES … UNITED STATES … UNITED STATES … UNITED STATES…
# 2 NA                        NA         NA         NA              NA              NA              NA            
# 3 NA                        NA         NA         Size of adjust… Size of adjust… Size of adjust… Size of adjus…
# 4 NA                        NA         NA         NA              NA              NA              NA            
# 5 Item                      All retur… Under      50000           75000           100000          200000        
# 6 NA                        NA         ,000 [… under           under           under           or more       
# 7 NA                        NA         NA         75000           100000          200000          200000        
# 8 NA                        1          2          3               4               5               6             
# 9 NA                        NA         NA         NA              NA              NA              NA            
#10 Number of returns         135257620  92150166   18221115        10499106        10797979        3589254       
#11 Number of joint returns   52607676   20743943   11329459        8296546         9193700         3044028       
#12 Number with paid prepare… 80455243   53622647   11025624        6260725         6678965         2867282       
#13 Number of exemptions      273738434  159649737  44189517        28555195        30919226        10424759      
#14 Adjusted gross income (A… 7364640131 1797097083 1119634632      905336768       1429575727      2112995921    
#15 Salaries and wages in AG… 114060887  75422766   16299827        9520214         9782173         3035907       
#16 Salaries and wages in AG… 5161583318 1541276272 896339313       721137490       1083175205      919655038     
#17 Taxable interest:  Number 59553985   28527550   10891905        7636612         9092673         3405245       
#18 Taxable interest: Amount  161324824  39043002   16353293        12852148        23160862        69915518      
#19 Ordinary dividends:  Num… 31158675   13174923   5255958         4095938         5824522         2807334       
#20 Ordinary dividends: Amou… 164247298  23867893   12810282        11524298        25842394        90202431 

按照@G 的建议。 Grothendieck na.locf0 是一个更好的候选人。

DF[] <- t(apply(DF, 1, zoo::na.locf0))