“do if”用于将多个变量合并为R

时间:2015-08-13 00:17:00

标签: r

  1. 我想从SPSS迁移语法“do if,compute,else,compute”到R
    • 所以,在SPSS中,我有:do if (Var1=1 or Var2=1 or Var3=1). compute VarNew1 = 1. ELSE. compute VarNew1 = 0.
    • 然后SPSS再次重新编码RECODE VarNew1 (0=0) (1=2). RECODE VarNew2 (0=0) (1=3). RECODE VarNew3 (0=0) (1=4). EXECUTE.
  2. 在SPSS创建VarNew1,VarNew2之后,使用与上面相同的过程并结合几个分类变量(来自Var4,Var5,Var3和Var7的Var1,Var2,Var3和VarNew2的VarNew1)。我们最终得到以下代码:COMPUTE VarNewFinal=MAX(VarNew1,VarNew2,VarNew3).

  3. 正如您所看到的,SPSS所做的是检查代码“1”的Var1,Var2和Var3并重新编码为新变量“VarNew1”。并重新编码以将代码转换为“VarNewFinal”,其中包含代码“2”,“3”,“4”。它用于绘制或频率表的最终变量。

  4. 在R中,我尝试使用VarNew1 <- data.frame(Var1,Var2,Var3,na.rm=T) VarNew1 <- ifelse(VarNew1==4, 1, 2)

    • 我想我可以跳过SPPS的第二次重新编码。
    • 在那个过程之后,我没有得到一个新的变量,而是我不能用来绘制的对象。
    • VarNewFinal <- data.frame(VarNew1,VarNew2,VarNew3) sjt.frq(VarNewFinal)
  5. 感谢您的关注,当我们努力从付费软件转向开源软件时,我们将非常感谢您的帮助。您还可以参考我可以阅读的有关如何处理分类变量的内容,使用多个代码来生成单个变量。

1 个答案:

答案 0 :(得分:1)

以下是我认为可能有用的示例。可能有很多方法可以解决这个问题,但我认为这是一个相当明确的起点:

# make some example data:
set.seed(18189)
df1 <- setNames(
  data.frame(replicate(6,sample(0:1,5,replace=TRUE))),
       paste0("Var",1:6))

# calculate your columns
df1$Final <- pmax(
  ifelse(rowSums(df1[c("Var1","Var2","Var3")]==1) > 0, 2, 0),
  ifelse(rowSums(df1[c("Var4","Var5","Var6")]==1) > 0, 3, 0)
)

添加结果的示例数据集:

#  Var1 Var2 Var3 Var4 Var5 Var6 Final
#1    0    1    0    0    0    1     3
#2    1    1    1    0    0    0     2
#3    0    1    0    0    1    0     3
#4    0    0    0    1    0    1     3
#5    0    0    0    1    1    0     3

这基本上检查Var1-3在每一行中是否有1,如果Var4-6在每行中的任何位置都有1,则使用标签获取最高集合{{{您指定的1}}或2)。 3只需要比较每个值的一组向量的最大值 - 例如pmax

如果您希望获得所有功能并使其更易于扩展,我们可能会变得更复杂:

pmax(c(1,2,3),c(0,2,4))