我试图创建一个变量,使我能够区分my_code中的负项和year == 2020中的正rate项.也就是说,在2020年利率变为负值,我的新变量是1,所有年份都是.到目前为止,我已经使用了mutateif_else,如果2020年的rate为<0,则取值为1,否则为0,但它只赋值 1到那一年,利率是负值,而不是整个my_id系列:

mydt %>% mutate(rate.sign = mutate( if_else (year == 2020 & rate < 0, 1 , 0)))

我怎么才能解决这个问题呢?

   id_code variable  year  rate my_id     new.var
     <dbl> <chr>    <dbl> <dbl> <dbl>   <dbl>
 1     233 x         1950 NA        1    0
 2     233 x         1955  2.97     1    0
 3     233 x         1960  2.98     1    0
 4     233 x         1965  1.2      1    0
 5     233 x         1970  2.01     1    0
 6     233 x         1975  2.39     1    0
 7     233 x         1980  2.28     1    0
 8     233 x         1985  0.66     1    0
 9     233 x         1990  0.66     1    0
10     233 x         1995  1.04     1    0
...
15     233 x         2020  0.81     1    0
18     233 x         1950  3.37     2    1
...                
30     233 x         2010 -0.78     2    1
31     233 x         2015 -0.82     2    1
32     233 x         2020 -0.75     2    1
33     233 x         2025 -0.45     2    1
34     233 x         2030 -0.62     2    1

任何帮助都是非常感激的.

以下是简化的数据集:

mydt = structure(list(id_code = c(233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 
233), 
variable = c("x", "x", "x", "x", "x", "x", "x", "x", "x", "x", "x", "x", "x", "x", "x", 
"x", "x", "x", "x", "x", "x", "x", "x", "x", "x", "x", "x", "x", "x", "x", "x", "x", "x", "x"), 
year = c(1950, 1955, 1960, 1965, 1970, 1975, 1980, 1985, 1990, 1995, 2000, 2005, 2010, 2015, 2020, 2025, 2030, 1950, 1955, 1960, 1965, 1970, 1975, 1980, 1985, 1990, 1995, 2000, 2005, 2010, 2015, 2020, 2025, 2030), 
rate = c(NA, 2.97, 2.98, 1.20, 2.01, 2.39, 2.28, 0.66, 0.66, 1.04, 0.96, 0.87, 0.86, 0.85, 0.81, 0.38, 0.58, 3.37, 2.93, 0, 2.02, 1.80, 2.37, 0, 0.72, 0.71, 1.33, 0.92, 1.06, -0.78, -0.82, -0.75, -0.45, -0.62), 
my_id = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2)), 
class = c("grouped_df", "tbl_df", "tbl", "data.frame"), row.names = c(NA, -34L), groups = structure(list( id_code = 233, variable = "x", .rows = structure(list(1:34), ptype = integer(0), class = c("vctrs_list_of",  "vctrs_vctr", "list"))), row.names = c(NA, -1L), .drop = TRUE, class = c("tbl_df", "tbl", "data.frame")))

推荐答案

这将在具有相同my_id的每组行中创建一个logical变量,即,如果any行,其中year == 2000也具有rate < 0,则为TRUE.

mydt %>%
group_by(my_id) %>%
mutate(neg.y2k = any(year == 2000 & rate < 0))

R相关问答推荐

通过绘图 Select 线串几何体并为其着色

更新合适的R mgcv::bam模型报告无效类型(关闭).'';错误

R Tidymodels textercipes-使用spacyR进行标记化-如何从生成的标记列表中删除标点符号

将年度数据插入月度数据

在for循环中转换rabrame

R根据条件进行累积更改

在R中,如何将变量(A,B和C)拟合在同一列中,如A和B,以及A和C在同一面板中?

将小数分隔符放在R中的前两位数字之后

R中的时间序列(Ts)函数计数不正确

传递ggplot2的变量作为函数参数—没有映射级别以正确填充美学

解析R函数中的变量时出现的问题

识别连接的子网(R-igraph)

安全地测试文件是否通过R打开

为什么我对圆周率图的蒙特卡罗估计是空的?

根据r中另一个文本列中给定的范围对各列求和

Ggplot2如何找到存储在对象中的残差和拟合值?

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

以R表示的NaN值的IS.NA状态

在R中使用ggraph包排列和着色圆

带查找数据的FCT_REORDER.帧