如何基于两列中的值创建新变量

时间:2020-09-15 18:32:23

标签: r if-statement dplyr multiple-conditions

我想基于两列的条件向数据框添加新列。

我有以下数据:

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)

2 个答案:

答案 0 :(得分:2)

我们可以首先按行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

答案 1 :(得分: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