【问题标题】:How to recode multiple-conditionals to -1/0/+1?如何将多个条件重新编码为-1/0/+1?
【发布时间】:2018-11-21 08:32:59
【问题描述】:

我的数据如下:

Name A B C
apple 1 -1 0
banana 2 -2 1
pear -3 0 1

我想将所有正值替换为-1,将所有负值替换为+1,但保持0为0,我该如何实现?

【问题讨论】:

    标签: r recode


    【解决方案1】:

    我们可以使用sign 来获取数据帧中所有元素的符号,然后通过将其乘以 -1 来反转它。

    df[-1] <- sign(df[-1]) * -1
    
    df
    #    Name  A B  C
    #1  apple -1 1  0
    #2 banana -1 1 -1
    #3   pear  1 0 -1
    

    来自?sign

    sign 返回一个向量,其中包含 x 的相应元素的符号(实数的符号分别为 1、0 或 -1,如果该数字为正数、零或负数)。

    数据

    df <- structure(list(Name = structure(1:3, .Label = c("apple", "banana", 
    "pear"), class = "factor"), A = c(-1, -1, 1), B = c(1, 1, 0), 
    C = c(0, -1, -1)), .Names = c("Name", "A", "B", "C"), row.names = c(NA, 
    -3L), class = "data.frame")
    

    【讨论】:

    • 为什么不简化为-sign(df[-1])
    • @AndreElrico 是的,这也会给出相同的结果。
    【解决方案2】:

    这绝不是与最高票数一样好,但这里有一个替代方案:

    ans <- df1[,-1] / -abs(df1[,-1])
    ans[sapply(ans,is.nan)] <- 0
    
    #> ans
    #   A B  C
    #1 -1 1  0
    #2 -1 1 -1
    #3  1 0 -1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-08
      • 1970-01-01
      • 2017-11-28
      • 2020-04-01
      • 2021-11-04
      • 1970-01-01
      • 2016-01-04
      • 2010-12-27
      相关资源
      最近更新 更多