R 包括以其他变量为条件的行 add_row

R include rows conditioned to other variables with `add_row`

我有一个 data.frame 喜欢 test。它对应于与公司注册相关的信息。 year.entry 反映了公司进入注册的时间段。 items 是代表容量并在整个时间保持不变的元素。公司可能会在特定年份增加产能。我的目标是纵向呈现这些信息。

为了做到这一点,我最好包括 2010 年到 2015 年之间缺失的年份的行。我已经用 tibble 中的 add_row() 尝试过这个,但我很难让它工作.

    > test %>% add_row(firm = firm, year.entry == (year.entry)+1, item = item, .before = row_number(year.entry) == n())

Error in eval(expr, envir, enclos) : object 'firm' not found

我想知道是否有更简单的方法来解决这个问题。理想的数据框应该是这样的:

                      firm              year.entry  item
                     <chr>                  <chr> <int>
                       1 1-102642692       2010    15
                       2 1-102642692       2011    15
                       3 1-102642692       2012    15  
                       4 1-102642692       2013    15
                       5 1-102642692       2014    15
                       6 1-102642692       2015     8

test 由以下公式给出:

test = data.frame(firm = c("1-102642692", "1-102642692"), year.entry = c(2010, 2015), item =c(15,8))

我在数据中添加了一个虚拟公司以备后用。

  • 首先,我确保每家公司都有 complete 感兴趣期间的所有年份。这就是我进入一家虚拟公司的原因。
  • 缺失的年份被添加到数据框中。
  • 然后我将最后的观察结转到na.locf
  • 完成后,我删除了虚拟公司。

comp <- data.frame(firm="test", year.entry= (2009:2016), item=0)

 test = data.frame(firm = c("1-102642692", "1-102642692"), year.entry = c(2010, 2015), item =c(15,8))

      library(zoo)

 rbind(test,comp) %>% 
   complete(firm,year.entry) %>% 
   arrange(firm, year.entry)%>%
   group_by(firm) %>%
   mutate(item = na.locf(item, na.rm=FALSE)) %>%
   filter(firm !="test")

结果:

 firm              year.entry item
 <fctr>            <dbl>      <dbl>
 1-102642692       2009       NA
 1-102642692       2010       15
 1-102642692       2011       15
 1-102642692       2012       15
 1-102642692       2013       15
 1-102642692       2014       15
 1-102642692       2015        8
 1-102642692       2016        8