ste*_*eve 1 r data-manipulation panel-data
我想知道你是否可以帮助我设计一种毫不费力的方法来编码我正在使用的这个国家/地区年度事件数据.
在下面的示例中,每一行都对应一个正在进行的事件(我最终将折叠成一个更广泛的面板数据集,这就是为什么它现在看起来很简陋).因此,例如,国家29在1920年开始发生事件,并在1921年继续(并结束).国家23在1921年开始了这一事件,持续到1923年.国家35开始了一个事件,发生在1921年,仅在1921年,等等.
country year
29 1920
29 1921
23 1921
23 1922
23 1923
35 1921
64 1926
135 1928
135 1929
135 1930
135 1931
135 1932
135 1933
135 1934
120 1930
70 1932
Run Code Online (Sandbox Code Playgroud)
我想要做的是创建"开始"和"持续"变量.此示例数据框中的"正在进行的"变量很容易.基本上:Data$ongoing <- 1
我更感兴趣的是创建"起始"变量.如果它标志着给定国家的事件发生,它将被编码为1.基本上,我想创建一个看起来像这样的变量,给出这个示例数据.
country year onset
29 1920 1
29 1921 0
23 1921 1
23 1922 0
23 1923 0
35 1921 1
64 1926 1
135 1928 1
135 1929 0
135 1930 0
135 1931 0
135 1932 0
135 1933 0
135 1934 0
120 1930 1
70 1932 1
Run Code Online (Sandbox Code Playgroud)
如果你能想到在R中做到这一点的轻松方法(在Excel等电子表格程序中使用它时最大限度地减少人为错误的可能性),我会很感激.我确实看到了这个相关的问题,但这个人的数据集看起来不像我的,可能需要采用不同的方法.
谢谢.下面是此示例数据的可重现代码.
country <- c(29,29,23,23,23,36,64,135,135,135,135,135,135,135,120,70)
year <- c(1920,1921,1921,1922,1923,1921,1926,1928,1929,1930,1931,1932,1933,1934,1930,1932)
Data=data.frame(country=country,year=year)
summary(Data)
Data
Run Code Online (Sandbox Code Playgroud)
这应该有效,即使每个国家有多个发起:
Data$onset <- with(Data, ave(year, country, FUN = function(x)
as.integer(c(TRUE, tail(x, -1L) != head(x, -1L) + 1L))))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
146 次 |
| 最近记录: |