【问题标题】:Question about recoding categorical variables in R关于在 R 中重新编码分类变量的问题
【发布时间】:2019-10-13 11:19:03
【问题描述】:

这里是非常绿色的 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") }

【问题讨论】:

  • 请尝试显示一些example data,即几行数据,显示您现在拥有的变量以及基于示例您期望com 变量的样子。一个提示:if 不适合 R 中的这类转换,最好看看ifelse。
  • if 不起作用,因为它期望一个标量值评估为真或假。然而,数据框中的列是一个向量。请改用ifelse。

标签: r variables if-statement conditional-statements


【解决方案1】:

因为您的数据被编码为二进制 0/1,我们可以只使用逻辑 OR 运算符,|。

## 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 |。也许您想要 &amp;?两者都有效好吧,使用符合您目标的任何一个。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多