如何解决如何基于两列中的值创建新变量
我想基于两列的条件向数据框添加新列。
我有以下数据:
Animal.1 <- c("A","B","C","A" )
Animal.2 <- c("B","A","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","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,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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。