R 比较两个字符并分配给新列

R 比较两个字符并分配给新列,r,R,我有一个数据列表,如下所示: ID col1 col1.1 col2 col2.1 col3 col3.1 rat AG AB AG AC AA AA cat BB GG BB CC AB AG dog -- AB AG GG CC GG ID col1

我有一个数据列表,如下所示:

ID    col1    col1.1    col2    col2.1    col3    col3.1
rat    AG       AB       AG       AC       AA       AA
cat    BB       GG       BB       CC       AB       AG
dog    --       AB       AG       GG       CC       GG
ID    col1    col1.1  OUT1  col2    col2.1  OUT2  col3  col3.1   OUT3  
rat    AG       AB     1     AG       AC     1     AA     AA      2
cat    BB       GG     3     BB       CC     3     AB     AG      1
dog    --       AB     0     AG       GG     4     BB     GG      3
我想比较两列中的每一列(即col1 vs col1.1,col2 vs col2.1…),如果它们满足条件,它会将结果添加到一个新列中

假设条件是这样的:

if any base of one column matched with -- of another column, assign 0
if AG or AC of one column matched with AB of another column, assign 1
if AA of one column matched with AA of another column, assign 2
if BB of one column matched with GG or CC of another column, assign 3
if one does not match any of the condition above, assign 4
因此,输出如下所示:

ID    col1    col1.1    col2    col2.1    col3    col3.1
rat    AG       AB       AG       AC       AA       AA
cat    BB       GG       BB       CC       AB       AG
dog    --       AB       AG       GG       CC       GG
ID    col1    col1.1  OUT1  col2    col2.1  OUT2  col3  col3.1   OUT3  
rat    AG       AB     1     AG       AC     1     AA     AA      2
cat    BB       GG     3     BB       CC     3     AB     AG      1
dog    --       AB     0     AG       GG     4     BB     GG      3
如何在两个字符串之间进行比较并向其中添加新列


谢谢

这应该可以让您通过一点重新安排来获得所需:

fnpair <- function(a) { if( a[1] =="--" | a[2]=="--"){0}else{
                  if( (a[1] %in% c("AG", "AC") & a[2] == "AB")|
                      (a[2] %in% c("AG", "AC") & a[1] == "AB") ){1}else{
                     if(  a[1] =="AA" & a[2] == "AA" ){2} else{
                        if(  (a[1] %in% c("GG","CC") & a[2] == "BB")|
                             (a[2] %in% c("GG","CC") & a[1] == "BB") ) {3} else{4} }}}}

 df1 <- read.table(text="ID    col1    col1.1    col2    col2.1    col3    col3.1
 rat    AG       AB       AG       AC       AA       AA
 cat    BB       GG       BB       CC       AB       AG
 dog    --       AB       AG       GG       CC       GG", header=TRUE)

 t( apply(df1[,2:7], 1, function(x) t( sapply(0:2, function(z) fnpair(x[2*z+c(1,2)]) ) ) ) )

#------------------

     [,1] [,2] [,3]
[1,]    1    4    2
[2,]    3    3    1
[3,]    0    4    4

fnpair到目前为止您尝试了什么?请查看
ifelse
。谢谢!但是你如何计算fnpair(x[2*z+c(1,2)])的方程呢?这只是标准逻辑的应用。我一个接一个地检查了您的规范,并构建了表示规则的表达式。