基于R中的多个变量通过条件重新编码创建新变量

基于R中的多个变量通过条件重新编码创建新变量,r,if-statement,conditional,recode,R,If Statement,Conditional,Recode,我有一个纵向数据集,其中包含每个受访者最多59个职位的信息。我对以下问题感兴趣: REASON LEFT JOB IF NOT CURRENTLY WORKING JOB 01 2012 REASON LEFT JOB IF NOT CURRENTLY WORKING JOB 02 2012 . . . 每个都有25种不同的选择,其中我只对前三种(1-裁员,2-关闭公司,3-结束临时工作)感兴趣。我想将这59个变量重新编码为1个变量,因此,如果有人因为公司倒闭或裁员而失去了工作(无论工作的数量

我有一个纵向数据集,其中包含每个受访者最多59个职位的信息。我对以下问题感兴趣:

REASON LEFT JOB IF NOT CURRENTLY WORKING JOB 01 2012
REASON LEFT JOB IF NOT CURRENTLY WORKING JOB 02 2012
.
.
.
每个都有25种不同的选择,其中我只对前三种(1-裁员,2-关闭公司,3-结束临时工作)感兴趣。我想将这59个变量重新编码为1个变量,因此,如果有人因为公司倒闭或裁员而失去了工作(无论工作的数量如何,我想将其编码为0,如果由于临时工作的结束,我想将其重新编码为1) 我可以写:

Jobloss[Job1==1|Job1==2|Job2==1|Job2==2]<-0
Jobloss[Job1==3|Job2==3]<-1

Jobloss[Job1==1 | Job1==2 | Job2==1 | Job2==2]您可以对行使用apply来检查是否有任何列小于3。有关示例,请参见下面的代码

df <- data.frame(Job1 = sample(1:3, 100, TRUE), 
                 Job2 = sample(1:3, 100, TRUE),
                 Job3 = sample(1:3, 100, TRUE))
df$Jobloss <- as.numeric(apply(df, 1, function(z) any(z < 3)))

df

df您可以编写一个函数来执行您要求的计算,通过在数据框的列上应用该函数来创建新的数据框,然后测量哪些行的列大于0。下面,
my_df
应该是一个只包含59个个人工作变量的数据框。您还可以使用apply函数将其子集为行中的那些变量

my_function <- function(my_var)
{
    my_output <- rep(NA, length(my_var))
    my_output[my_var == 1 | my_var == 2] <- 0
    my_output[my_var == 3] <- 1
    return(my_output)
}
new_df <- apply(my_df, 2, my_function)
my_df$Jobloss <- as.integer(rowSums(new_df, na.rm = TRUE) > 0)

my_函数感谢您的帮助:)哦,实际上很抱歉,这会为除my_var==3之外的任何对象创建0,而不是NA。我希望其他一切都是NA。数据中已经有NA,还有其他答案选择,例如4、5等。我希望1、2或3以外的任何答案都是NA。