在R

时间:2015-10-06 21:13:47

标签: 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"

1 个答案:

答案 0 :(得分:1)

我们根据原始数据集&#39; temp&#39;创建行名称,根据temp中行号的最小值和最大值,创建另一个数据集(&#39; df2&#39;) ,left_joinNA数据集,并使用na.locf中的library(zoo)填充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 元素。

{{1}}