如何根据两列中的值创建新变量

How to create a new variable based on the values in two columns

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

我有以下数据:

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)

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

使用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