【问题标题】:Is there a way to generate a new variable only if it meets certain criteria?有没有办法仅在满足某些条件时才生成新变量?
【发布时间】:2020-10-05 18:28:48
【问题描述】:

我正在尝试在 R 中复制以下 Stata 代码:

gen UAPDL_1=sqrt((((Sanchez_1-Iglesias_1)^2)+((Casado_1-Iglesias_1)^2)+((Rivera_1-Iglesias_1)^2))/3) if maxIglesias_1==1

replace UAPDL_1=sqrt((((Sanchez_1-Rivera_1)^2)+((Casado_1-Rivera_1)^2)+((Iglesias_1-Rivera_1)^2))/3) if maxRivera_1==1

换句话说,我正在尝试进行不同的计算并根据某些条件生成具有不同值的新变量(在这种情况下,它们在另一个变量中具有值 1。我设法创建了要满足的变量进行计算(maxIglesias==1 和 maxRivera==1),但我被困在 UAPDL 变量的生成中。我尝试使用 case_whenifelse,但在这些情况下,这些命令只能让您定义某个价值。有没有办法使用 mutate 或 dplyr(或任何其他包)来实现这个目标?

【问题讨论】:

    标签: if-statement select filter dplyr case-when


    【解决方案1】:

    欢迎来到 SO!

    为了清楚起见,让我尝试“解析”您的问题。

    您希望根据两个不同变量(maxIglesias_1 和 maxRivera_1,假设它们分别对应于值 f(I) 和 f(R))的值生成一个变量 UAPDL。在这里我注意到,根据您发布的代码的 sn-p,不能保证这两个变量是互斥的 - 即,您可能有 maxIglesias_1 == 1 和 maxRivera_1 == 1 的记录。在这些情况下,运行命令的顺序很重要,因为它们最终都被赋值为 f(R),或者如果你扭曲它们,则为 f(I)。

    但是,为了复制您发布的 Stata 命令(包括排序问题!)您应该运行

    UAPDL_1 <- numeric(length(maxIglesias_1)) # generate the vector
    UAPDL_1[maxIglesias_1 == 1] <- f(I)
    UAPDL_1[maxRivera_1 == 1] <- f(R)
    

    我假设maxIglesias_1maxIglesias_1 是与原始Stata 矩阵长度相同的两个R 对象。

    祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-06
      相关资源
      最近更新 更多