r - 构造一个有条件地取某个值直到满足另一个条件的变量
问题描述
我有一个面板数据集,其中包含我想确定冲突后年份的冲突数据。
所以我自己构建了一个变量,它用“3”编码了从冲突到和平的过渡。每当一个新国家的值开始时,我都会用 NA 对相同的变量进行编码。小号
我现在要做的是创建一个新的二进制变量,它用 1 和冲突年份标识冲突后年份,并且从不与 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
推荐阅读
- javascript - Magnific Popup 落后于引导模式
- python - 在 Catalina、Python/Python3、pip/pip3、PATH、zshrc 等中使用 zsh 的问题
- python - 编码方案是从每个字符的 ASCII 值中减去 2
- c++ - 为什么左值不能改变自己。左值用户是什么意思?
- r - 如何制作具有子集值和同一图上所有值的箱线图?
- r - 如何从 R 中的 selectInput 函数中一次选择所有输入
- javascript - Snackbar 消息不会实时更改
- firebase - Firestore 安全规则中的每个字段规则
- installation - 无法安装
- powershell - powershell 计算文件夹中的文件并创建带有文件名结果的文本文件