仅当满足特定条件时,才可以生成新变量吗?

时间:2020-06-16 07:50:07

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

我正在尝试在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(或任何其他软件包)是否可以实现此目标?

1 个答案:

答案 0 :(得分:0)

欢迎您!

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

您要根据两个不同变量(maxIglesias_1和maxRivera_1的值,分别表示值f(I)和f(R))生成变量UAPDL。在这里,我注意到,根据您发布的代码的片段,不能保证两个变量是互斥的-即,您的记录可能具有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是两个R对象,其长度与原始Stata矩阵相同。

祝你好运!