从 R 中的面板数据结构中的基本变量创建变量初始值

Creating a Variable Initial Values from a base variable in Panel Data Structure in R

我正在尝试在 R 中创建一个新变量,其中包含基于组(国家)的另一个变量(犯罪)的初始值,考虑到每个组(在面板数据框架上)可观察的初始时间段,我当前数据如下所示:

country year Crime
Albania 2016 2.7369478
Albania 2017 2.0109779
Argentina 2002 9.474084
Argentina 2003 7.7898825
Argentina 2004 6.0739941

我希望它看起来像这样:

country year Crime Initial_Crime
Albania 2016 2.7369478 2.7369478
Albania 2017 2.0109779 2.7369478
Argentina 2002 9.474084 9.474084
Argentina 2003 7.7898825 9.474084
Argentina 2004 6.0739941 9.474084

我看到 ddply 可以使它以这种方式工作,但问题是最新的 R 更新不再支持它。

提前谢谢你。

library(data.table)

setDT(data)[, Initial_Crime:=.SD[1,Crime], by=country]

     country year    Crime Initial_Crime
1:   Albania 2016 2.736948      2.736948
2:   Albania 2017 2.010978      2.736948
3: Argentina 2002 9.474084      9.474084
4: Argentina 2003 7.789883      9.474084
5: Argentina 2004 6.073994      9.474084

可能arrangeyear分组,然后在country分组后设置Initial_Crime为分组中的firstCrime

library(tidyverse)

df %>%
  arrange(year) %>%
  group_by(country) %>%
  mutate(Initial_Crime = first(Crime))

输出

  country    year Crime Initial_Crime
  <chr>     <int> <dbl>         <dbl>
1 Argentina  2002  9.47          9.47
2 Argentina  2003  7.79          9.47
3 Argentina  2004  6.07          9.47
4 Albania    2016  2.74          2.74
5 Albania    2017  2.01          2.74

一个data.table解决方案

setDT(df)

df[, x := 1:.N, country
   ][x==1, initial_crime := crime
     ][, initial_crime := nafill(initial_crime, type = "locf")
       ][, x := NULL
         ]