【问题标题】:How to create a new variable based on the values in two columns如何根据两列中的值创建新变量
【发布时间】:2021-01-02 13:37:57
【问题描述】:

我想根据两列的条件向数据框中添加一个新列。

我有以下数据:

Animal.1 <- c("A", "B", "C", "B", "A" )
Animal.2 <- c("B", "A", "A", "C", "C")
df <- data.frame(Animal.1, Animal.2)

如果满足以下条件:

Animal.1 = A 和 Animal.2 = B 要么 Animal.1 = B 和 Animal.2 = A

我希望名为 pair.code 的新列等于 1。

我希望每对动物 ID 使用不同的数字,但如果在 Animal.1 和 Animal.2 或 Animal.2 和 Animal.1 中找到相同的动物 ID,则使用相同的数字。

最终数据应如下所示:

Animal.1 <- c("A", "B", "C", "B", "A" )
Animal.2 <- c("B", "A", "A", "C", "C")
pair.code <- c("1", "1", "2", "3", "2")


df <- data.frame(Animal.1, Animal.2)

【问题讨论】:

    标签: r if-statement dplyr multiple-conditions


    【解决方案1】:

    我们可以先sort逐行元素,然后用match创建'pair.code'

    m1 <- t(apply(df, 1, sort))
    v1 <- paste(m1[,1], m1[,2])
    df$pair.code <- match(v1, unique(v1))
    df$pair.code
    #[1] 1 1 2 3 2
    

    【讨论】:

    • 谢谢,这段代码也能完美运行。这段代码比上面的解决方案更容易理解。
    【解决方案2】:

    使用factor的解决方案:

    df$pair.code <- as.numeric(factor(apply(df, 1, function(x) paste0(sort(x), collapse=""))))
    
    df
    #>   Animal.1 Animal.2 pair.code
    #> 1        A        B         1
    #> 2        B        A         1
    #> 3        C        A         2
    #> 4        B        C         3
    #> 5        A        C         2
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多