在R中添加缺失行最简单的方法

  • 本文关键字:最简单 方法 添加
  • 更新时间 :
  • 英文 :


通过table/cumsum命令生成以下表:

> temp
   numCars
18       1
17       2
16       8
15      18
14      25
13      29
12      42
11      55
10      70
9      134
8      160
7      172
6      177
5      180
3      181
2      181
1      181
0      181
 temp <- structure(c(1L, 2L, 8L, 18L, 25L, 29L, 42L, 55L, 70L, 134L, 160L,                                             
 172L, 177L, 180L, 181L, 181L, 181L, 181L), .Dim = c(18L, 1L), .Dimnames = list(                               
     c("18", "17", "16", "15", "14", "13", "12", "11", "10", "9",                                              
     "8", "7", "6", "5", "3", "2", "1", "0"), "numCars"))  

可以看到,缺少名称为4的行。在R中,最简单的填充方法是什么呢?这里的值应该是较低的数字(在本例中是181)。

我知道我可以用一个混乱的for循环来做到这一点,我可以进去,调整大小,创建一个新的DF,然后放入任何空白值。我只是想知道有没有更好的办法?

表代码如下:

cohortSizeByMileage <- data.matrix(cumsum(rev(table(cleanMileage$OdometerBucket))))
colnames(cohortSizeByMileage) <- "numCars"

我们从原始数据集'temp'创建行名作为列,基于temp中行号的最小值和最大值,创建另一个数据集('df2'), mergeleft_join为数据集,并使用library(zoo)中的na.locf填充NA元素。

df1 <- data.frame(numCars=temp[[1]], rn1=as.numeric(row.names(temp)))
df2 <- data.frame(rn1= max(df1$rn1):min(df1$rn1))
library(dplyr)
library(zoo)
left_join(df2, df1) %>%
        mutate(numCars= na.locf(numCars,fromLast=TRUE ))
#   rn1 numCars
#1   18       1
#2   17       2
#3   16       8
#4   15      18
#5   14      25
#6   13      29
#7   12      42
#8   11      55
#9   10      70
#10   9     134
#11   8     160
#12   7     172
#13   6     177
#14   5     180
#15   4     181
#16   3     181
#17   2     181
#18   1     181
#19   0     181

最新更新