有关在R中重新编码分类变量的问题

时间:2019-05-27 23:54:23

标签: r variables if-statement conditional-statements

非常绿色的R用户在这里。我必须对类别变量进行分类:一种是,针对儿童的委员会犯罪或存在精神健康问题(两分,1 =犯罪,0 =精神健康),针对儿童的犯罪行为或存在滥用药物的问题(二分,1 =犯罪,0 =物质滥用)。我想将这些群体合并在一起,这样我就会有一个二分法,危害儿童和心理健康或滥用毒品的群体。最好的方法是什么?我一直在玩“ if”语句,但无济于事。

我一直在玩“ if”语句,但无济于事。我想在数据集(com)中创建一个新变量,将针对儿童的犯罪(1)与心理健康/物质滥用(0)结合起来

x$com <- if(x$Group.finalCvsM == 1) {
  x$com("1") }
  if(x$Group.finalCvsS == 1) {
    x$com("1") }
  if(x$Group.finalCvsM == 0) {
    x$com("0") }
    if(x$Group.finalCvsS == 0) {
      x$com("0") }

1 个答案:

答案 0 :(得分:1)

由于您的数据编码为二进制0/1,因此我们只能使用逻辑或运算符|

## very nice way to solve this particular problem
x$com = x$Group.finalCvsM | x$Group.finalCvsS
## The result will be TRUE or FALSE. 
## If you want 1/0 instead, then wrap it in as.integer: 
x$com = as.integer(x$Group.finalCvsM | x$Group.finalCvsS)

通常ifelse()if的矢量化版本,适用于此类情况。有关详细信息,请参见帮助页面?ifelse。在这里,您可以将其用作:

x$com = ifelse(x$Group.finalCvsM == 1 | x$Group.finalCvsS == 1, 1, 0)

注意::由于您的问题没有给出示例输入和期望的输出,因此我不确定100%是否想要OR |。也许您想要{{1} }?两者都能正常工作,请使用满足您目标的任何一种。