【问题标题】:easiest way to add missing rows in R在 R 中添加缺失行的最简单方法
【发布时间】:2015-10-07 05:39:42
【问题描述】:

我有通过 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"

【问题讨论】:

  • rbind 并订购? rbind(temp, '4' = 181)[as.character(18:0), , drop = FALSE]
  • @rawr,在这种情况下是的,但我希望它适用于从 1 到最大值的任何缺失数字。 0 将永远存在。
  • 添加表格代码。您可能可以转换为因子,以便即使计数为 0,所有级别仍将保留
  • @rawr,这是表格代码。但是请记住,我不希望它为 0,我希望它取较低级别的值?
  • 我总是为这类问题编写自定义代码

标签: r


【解决方案1】:

我们根据 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

【讨论】:

  • 嗨,这很好用——我认为你不需要 temp[[1]] 而不仅仅是第一个 df 中的 temp,但我明白了。标记完成。
  • @user1357015 只是提取列以创建新数据集,或者在现有数据集中创建另一列。
猜你喜欢
  • 2013-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-21
  • 2013-05-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多