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)])的方程呢?这只是标准逻辑的应用。我一个接一个地检查了您的规范,并构建了表示规则的表达式。