我已经将这两个代码建议应用于我的原始数据集,以比较和平1和和平2.

和平1:

d_muslim <- d_muslim %>% 
   mutate(last_conflict = lag(if_else(conflict == 1, year,NA),default = min(year) - 1),
   .by = country) %>%     
   tidyr::fill(last_conflict, .direction = "down") %>% 
   mutate(peace1 = year - last_conflict - 1)

和平2:

d_muslim <- d_muslim %>%
  mutate(helper = cumsum(lag(conflict, default = 1) == 1),.by = country) %>% 
  mutate(peace2 = year - first(year), .by = c(country, helper)) %>%
  select(-helper)

结果:

country year conflict peace1 peace2
Iran 1946 0 -73 0
Iran 1947 0 -72 1
Iran 1948 0 -71 2
Iran 1949 0 -70 3
Iran 1950 0 -69 4
Iran 1951 0 -68 5
Iran 1952 0 -67 6
Iran 1953 0 -66 7
Iran 1954 0 -65 8
Iran 1955 0 -64 9
Iran 1956 0 -63 10
Iran 1957 0 -62 11
Iran 1958 0 -61 12
Iran 1959 0 -60 13
Iran 1960 0 -59 14
Iran 1961 0 -58 15
Iran 1962 0 -57 16
Iran 1963 0 -56 17
Iran 1964 0 -55 18
Iran 1965 0 -54 19
Iran 1966 1 -1 0
Iran 1967 0 0 1
Iran 1968 0 1 2
Iran 1969 0 2 3
Iran 1970 0 3 4
Iran 1971 0 4 5
Iran 1972 0 5 6
Iran 1973 0 6 7
Iran 1974 0 7 8
Iran 1975 0 8 9
Iran 1976 0 9 10
Iran 1977 0 10 11
Iran 1978 0 11 12
Iran 1979 1 -1 0
Iran 1980 0 0 1
Iran 1981 0 1 2
Iran 1982 0 2 3
Iran 1983 0 3 4
Iran 1984 0 4 5
Iran 1985 0 5 6
Iran 1986 1 -1 0
Iran 1987 0 0 1
Iran 1988 0 1 2
Iran 1989 0 2 3
Iran 1990 1 -1 0
Iran 1991 1 -1 0
Iran 1992 0 0 1
Iran 1993 1 -1 0
Iran 1994 0 0 1
Iran 1995 0 1 2
Iran 1996 1 -1 0
Iran 1997 1 -1 0
Iran 1998 0 0 1
Iran 1999 1 -1 0
Iran 2000 0 0 1
Iran 2001 0 1 2
Iran 2002 0 2 3
Iran 2003 0 3 4
Iran 2004 0 4 5
Iran 2005 1 -1 0
Iran 2006 0 0 1
Iran 2007 0 1 2
Iran 2008 0 2 3
Iran 2009 0 3 4
Iran 2010 0 4 5
Iran 2011 0 5 6
Iran 2012 0 6 7
Iran 2013 0 7 8
Iran 2014 0 8 9
Iran 2015 0 9 10
Iran 2016 1 -1 0
Iran 2017 1 -1 0
Iran 2018 1 -1 0

两个密码都不符合我的条件.

  1. 和平年限的累积必须延续到冲突年.并且不设置为0.
  2. 冲突一年后的一年必须以和平开始== 0.就像和平1的功能一样正确.

推荐答案

我觉得你的15岁应该是18岁,但除此之外...

使用你的"预期"作为起点(用于并排比较):

quux |>
  mutate(
    last_conflict = lag(if_else(conflict == 1, year, NA), default = min(year) - 1),
    .by = country) |>
  tidyr::fill(last_conflict, .direction = "down") |>
  mutate(peace2 = year - last_conflict - 1)
#     country year conflict peace last_conflict peace2
# 1  country1 1990        1     0          1989      0
# 2  country1 1991        0     0          1990      0
# 3  country1 1992        0     1          1990      1
# 4  country1 1993        0     2          1990      2
# 5  country1 1994        1     3          1990      3
# 6  country1 1995        1     0          1994      0
# 7  country1 1996        0     0          1995      0
# 8  country1 1997        0     1          1995      1
# 9  country1 1998        0     2          1995      2
# 10 country1 1999        0     3          1995      3
# 11 country1 2014        0    15          1995     18
# 12 country2 1990        0     0          1989      0
# 13 country2 1991        1     1          1989      1
# 14 country2 1992        0     0          1991      0
# 15 country2 1995        1     3          1991      3
# 16 country2 1996        0     0          1995      0
# 17 country2 2000        1     4          1995      4

数据

quux <- structure(list(country = c("country1", "country1", "country1", "country1", "country1", "country1", "country1", "country1", "country1", "country1", "country1", "country2", "country2", "country2", "country2", "country2", "country2"), year = c(1990L, 1991L, 1992L, 1993L, 1994L, 1995L, 1996L, 1997L, 1998L, 1999L, 2014L, 1990L, 1991L, 1992L, 1995L, 1996L, 2000L), conflict = c(1L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 0L, 1L), peace = c(0L, 0L, 1L, 2L, 3L, 0L, 0L, 1L, 2L, 3L, 15L, 0L,  1L, 0L, 3L, 0L, 4L)), class = "data.frame", row.names = c(NA, -17L))

R相关问答推荐

基于R中的GPS点用方向箭头替换点

过滤矩阵以获得R中的唯一组合

在R中列表的结尾添加数字载体

如果列中存在相同的字符串,则对行值进行总和

有没有一种方法可以从函数中创建一个值的列表,然后将这些值变成R中的直方图?我一直觉得不行

有没有一个R函数允许你从一个数字变量中提取一个数字,而不考虑它的位置(不仅仅是第一个或最后一个数字?

将嵌套列表子集化为嵌套列表

将数据集中的值增加到当前包含的最大值

如何直接从R中的风险分数计算c指数?

在R中使用数据集名称

移除仪表板Quarto中顶盖和车身之间的白色区域

以更少间隔的较小表中的聚合离散频率表

给定开始日期和月份(数字),如何根据R中的开始日期和月数创建日期列

随机 Select 的非NA列的行均数

我需要使用ggplot2制作堆叠条形图

如何使用ggplot2根据绘图中生成的斜率对小平面进行排序?

条形图中的条形图没有try 赋予它们的 colored颜色

带有Bootswatch Cerulean主题的shiny 仪表板中的浏览&按钮可见性问题

从data.table列表中提取特定组值,并在R中作为向量返回

如何在基数R中根据矩阵散点图中的因子给数据上色?