如何根据两列中的值创建新变量
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
我想根据两列的条件向数据框添加一个新列。
我有以下数据:
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
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