r - 构造一个有条件地取某个值直到满足另一个条件的变量

标签 r database loops if-statement

我有一个面板数据集,其中包含我想确定冲突后年份的冲突数据。

于是我自己构造了一个变量,用“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。它会阻止 whichsumcumsum 等函数按您希望的方式工作。无论如何,您可能不需要标记新国家/地区的第一行,因为您将用于分析的大多数 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/

相关文章:

r - igraph 中的颜色特定节点

regex - 如何使用 stringr 和 regexp 删除字符串末尾的空格和数字?

mysql - 添加复合主键删除索引

mysql - 尝试有效删除具有多列索引的表中的记录

java - 当给定起始日期时,如何在 Java 中动态创建日期字段?

r - Dplyr:group_by 并将多列转换为向量

从合并中返回不匹配的记录

sql - 将 ASPNETDB.mdf 上传到共享主机?

javascript - 避免循环 iframe

python - 删除以另一列的大值为条件的值