从 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
可能arrange
被year
分组,然后在country
分组后设置Initial_Crime
为分组中的first
Crime
。
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
]
我正在尝试在 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
可能arrange
被year
分组,然后在country
分组后设置Initial_Crime
为分组中的first
Crime
。
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
]