【问题标题】:R condition new variable on two variablesR条件两个变量的新变量
【发布时间】:2020-11-27 00:24:46
【问题描述】:

所以我遇到了以下问题:我有以下形式的数据框:

ID   Date        Var1
1    20200101    0
1    20200102    0
1    20200103    0
1    20200104    0
1    20200104    0
2    20200101    0
2    20200102    0
2    20200103    4
2    20200104    7
2    20200105    13

我想定义一个额外的变量,如果 Var1 在 1 月份 (20200101:20200131) 首次 > 0,则取 1,否则取 0,关于 ID。实际的数据库分布在 6 个月内,Var1 是一个运行总数,所以如果一次 > 0,它就不会再减少了。 所以最终的帧应该是这样的:

ID   Date        Var1   new_var
1    20200101    0       0
1    20200102    0       0
1    20200103    0       0
1    20200104    0       0
1    20200104    0       0
2    20200101    0       1
2    20200102    0       1
2    20200103    4       1
2    20200104    7       1
2    20200105    13      1

感谢您的所有回答!

【问题讨论】:

  • 为什么你有2 20200101 0 1?不应该是 0?
  • @Duck 不,它应该是一个,因为该组在一月份 Var1 > 0 的条件是正确的

标签: r if-statement dplyr conditional-statements


【解决方案1】:

这是使用avesubstr 仅获取每个日期的月/年的解决方案。

z <- substr(df1$Date, 1, 6)
jan <- ave(df1$Date, df1$ID, FUN = function(x) substr(x, 5, 6) == "01")
zero <- ave(df1$Var1, df1$ID, z, FUN = function(x) any(x > 0))
df1$new_var <- +(as.logical(jan) & zero)

df1
#   ID     Date Var1 new_var
#1   1 20200101    0       0
#2   1 20200102    0       0
#3   1 20200103    0       0
#4   1 20200104    0       0
#5   1 20200104    0       0
#6   2 20200101    0       1
#7   2 20200102    0       1
#8   2 20200103    4       1
#9   2 20200104    7       1
#10  2 20200105   13       1

数据

df1 <- read.table(text = "
ID   Date        Var1
1    20200101    0
1    20200102    0
1    20200103    0
1    20200104    0
1    20200104    0
2    20200101    0
2    20200102    0
2    20200103    4
2    20200104    7
2    20200105    13
", header = TRUE)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-02
    • 1970-01-01
    • 2022-01-11
    • 2011-01-04
    • 2022-07-15
    • 1970-01-01
    • 2020-02-29
    相关资源
    最近更新 更多