只有满足特定条件的情况下,才有生成新变量的方法吗?

问题描述 投票:0回答:1

我正在尝试在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 mutate case-when
1个回答
0
投票

欢迎您使用SO!

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

您想根据两个不同变量(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是长度与原始Stata矩阵相同的两个R对象。

祝你好运!

© www.soinside.com 2019 - 2024. All rights reserved.