基于R

时间:2016-03-15 22:14:13

标签: 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-Layoff,2-Company关闭,3-end of temp work)感兴趣。我想将这59个变量重新编码为1个变量,所以如果有人因公司关闭或裁员而失去工作(无论工作的数量如何,我都想将其编码为0,如果由于临时工作结束我想把它重新编码为1.) 我可以写:

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

如果我只有2个失业变量,那将很容易;但我有59个。 如果这些变量/列中的任何一个(c(1:59))== 1或== 2,是否有一种简短的方法告诉R将新变量编码为0。

我不仅要将它用于失业,还要用于其他一些问题;所以这个命令可以为我节省很多时间。如果你能提供帮助我真的很感激。谢谢

2 个答案:

答案 0 :(得分:0)

您可以对行使用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

答案 1 :(得分:-1)

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

my_df

我假设你想要除了1,2或3以外的任何东西都被标记为NA。如果不是这种情况,则必须调整函数中的第一行。