【问题标题】:Converting factors to binary asymmetric variable types将因子转换为二进制不对称变量类型
【发布时间】:2018-10-07 10:11:42
【问题描述】:

我想将R 中的一些变量类型从因子转换为二进制非对称变量类型。

我使用以下语法成功地将我的一些数据从因子转换为有序因子:mydata[,200] <-as.ordered(mydata[,200]),但是当我尝试使用类似的方法将它们转换为二进制不对称变量时,我没有成功,并且无法找到任何有关如何在网上或在我的书中做到这一点。我需要将它们指定为不对称,因为我将使用 daisy 函数来查看差异。如果有人能告诉我如何从因子转换为二进制不对称,我将非常感激。

编辑:回答关于非对称变量与对称变量的问题:二元对称变量和二元非对称变量之间的主要区别在于对称变量,两者的权重相同(该人是男性还是女性),而在不对称变量中,一个比另一个更重要。人们是否具有共同特征并不重要,重要的是他们。例如,色盲的人有一些共同点,但非色盲的人则没有。

所以,我要做的是将其设置为基本上 0=不重要,1=重要。从我读到的内容(Kaufmann & Rousseeuw 1990)中,重要的是要区分这些在做不同时是不对称的。

structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, NA, 1L, NA, 
1L, 1L, 1L, NA, NA, 1L, 1L, 1L, NA, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L), .Label = c("0", "1"), class = "factor")

进一步的编辑:我不相信我需要一个虚拟变量,因为它在技术上已经是一个二进制文件(一切都是 1、0 或 NA)——我只是不知道如何让 R 将变量更改为一个不对称的二元变量而不是一个因子。

【问题讨论】:

  • 你能发布一个数据示例吗?转型的标准是什么?要发布数据,请使用dput(head(mydata[, cols you want], 20)) 的输出编辑问题
  • 我同意 Meta Downvoting of new user questions 接受的答案
  • 二进制变量和二进制非对称变量有什么区别?我在网上发现的唯一东西似乎是意图之一。转换为二进制变量的机制不应依赖于结果变量的语义。 In any event, ifelse(condition,0,1) with the appropriate choice of condition is a natural way to proceed.

标签: r binary-data asymmetric r-daisy


【解决方案1】:

添加输入和所需输出的示例将很有帮助。我相信你正在寻找一种叫做dummy variables的东西。

    col1
row1  a   
row2  b
row3  a 

变成了

      a b
row1  1 0
row2  0 1
row3  1 0

如果这就是您将因子变量转换为二进制非对称变量的意思,请查看dummies package,它在 R 中执行此操作。

【讨论】:

    【解决方案2】:

    一种方法是首先使用as.vector() 将您的因子转换为一个字符向量,其中级别12 替换为它们的标签"0""1",然后使用as.numeric() 转换结果为数字01

    v <- structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
                     1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, NA, 1L, NA, 
                     1L, 1L, 1L, NA, NA, 1L, 1L, 1L, NA, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
                     1L, 1L, 1L, 1L, 1L), .Label = c("0", "1"), class = "factor")
    
    v <- as.numeric(as.vector(v))
    

    同样,虽然可能更隐晦,您可以将最后一行替换为

    v <- as.numeric(v) - 1
    

    as.numeric() 获取因子并将其转换为水平向量(即数字 1 和 2),然后减去 1 将结果降至 0 和 1。 无论哪种情况,您都会得到一个二进制数值向量:

    > v
     [1]  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  1  0
    [27] NA  0 NA  0  0  0 NA NA  0  0  0 NA  0  0  0  0  0  0  0  0  0  0  0  0
    

    【讨论】:

      猜你喜欢
      • 2017-03-23
      • 1970-01-01
      • 2018-03-17
      • 1970-01-01
      • 1970-01-01
      • 2023-02-13
      • 2017-03-09
      • 2012-12-03
      • 1970-01-01
      相关资源
      最近更新 更多