我有一个面板数据集,其中包含我想确定冲突后年份的冲突数据。
于是我自己构造了一个变量,用“3”编码了从冲突到和平的过渡。每当新国家/地区的值开始时,我都会用 NA 对同一变量进行编码。 S
我现在想做的是创建一个新的二进制变量,用 1 标识冲突后年份,用 0 标识冲突年份,并且永远不会与 0 冲突。为此,我必须每年分配,在过渡期间的 3 之后带有 1 的变量,直到同一列中出现 NA。如下:
Country Year transition post-conflict
Afghanistan 1994 0 0
Afghanistan 1995 0 0
Afghanistan 1996 3 1
Afghanistan 1997 2 1
Afghanistan 1998 2 1
Albania 1994 NA 0
Albania 1994 2 0
我该怎么做?
最佳答案
你可能不应该那样使用 NA
。它会阻止 which
、sum
和 cumsum
等函数按您希望的方式工作。无论如何,您可能不需要标记新国家/地区的第一行,因为您将用于分析的大多数 R 函数都可以按 Country
分组,而无需特殊标记来显示每个组的起始位置。
下面我将 NA
更改为不同的内容,并使 transition
成为一个因素。然后您可以使用 cumsum
创建新列。
library(data.table)
setDT(df) # assuming your data is called df
# fix transition column
df[is.na(transition), transition := 90]
df[, transition := as.factor(transition)]
# create post_conflict column
df[, post_conflict := cumsum(transition == 3), by = Country]
# Country Year transition post_conflict
# 1: Afghanistan 1994 0 0
# 2: Afghanistan 1995 0 0
# 3: Afghanistan 1996 3 1
# 4: Afghanistan 1997 2 1
# 5: Afghanistan 1998 2 1
# 6: Albania 1994 90 0
# 7: Albania 1994 2 0
关于r - 构造一个有条件地取某个值直到满足另一个条件的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53141099/