do if (Var1=1 or Var2=1 or Var3=1).
compute VarNew1 = 1.
ELSE. compute VarNew1 = 0.
RECODE VarNew1 (0=0) (1=2).
RECODE VarNew2 (0=0) (1=3).
RECODE VarNew3 (0=0) (1=4).
EXECUTE.
在SPSS创建VarNew1,VarNew2之后,使用与上面相同的过程并结合几个分类变量(来自Var4,Var5,Var3和Var7的Var1,Var2,Var3和VarNew2的VarNew1)。我们最终得到以下代码:COMPUTE VarNewFinal=MAX(VarNew1,VarNew2,VarNew3).
正如您所看到的,SPSS所做的是检查代码“1”的Var1,Var2和Var3并重新编码为新变量“VarNew1”。并重新编码以将代码转换为“VarNewFinal”,其中包含代码“2”,“3”,“4”。它用于绘制或频率表的最终变量。
在R中,我尝试使用VarNew1 <- data.frame(Var1,Var2,Var3,na.rm=T)
VarNew1 <- ifelse(VarNew1==4, 1, 2)
VarNewFinal <- data.frame(VarNew1,VarNew2,VarNew3)
sjt.frq(VarNewFinal)
感谢您的关注,当我们努力从付费软件转向开源软件时,我们将非常感谢您的帮助。您还可以参考我可以阅读的有关如何处理分类变量的内容,使用多个代码来生成单个变量。
答案 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))