在R中将两个列值粘贴在一起时忽略NA值

在R中将两个列值粘贴在一起时忽略NA值,r,R,我有一个名为dd2的数据帧。我需要粘贴Left.Gene.Symbols和Right.Gene.Symbols中的值,这可以通过简单地使用下面的代码来完成,但如果缺少值,我不希望粘贴NAs。我希望它看起来像组合列中的那样,如结果中所示 麦可德 #to remove NAs dd2[dd2 == 'NA'] <- NA #pasting values together result <- cbind(dd2,combination = paste(dd2[,"Left.Gene.Sym

我有一个名为
dd2
的数据帧。我需要粘贴
Left.Gene.Symbols
Right.Gene.Symbols
中的值,这可以通过简单地使用下面的代码来完成,但如果缺少值,我不希望粘贴NAs。我希望它看起来像
组合
列中的那样,如
结果
中所示

麦可德

#to remove NAs
dd2[dd2 == 'NA'] <- NA
#pasting values together
result <- cbind(dd2,combination = paste(dd2[,"Left.Gene.Symbols"],dd2[,"Right.Gene.Symbols"],sep="*"))

单向使用
ifelse

ifelse(is.na(dd2[,3]),paste0(dd2[,2],"*"),paste(dd2[,2],dd2[,3],sep="*"))

#[1] "AK2*"     "HFM1*PPT" "HFM1*"    "HFM1*GGT" "HFM1*"

您可以这样做,暂时用空字符
替换
NA


当然,用列名替换上面的列号。我没有写它们,因为它们太长了。

我们可以使用
qdap
中的
NAer
sprintf

library(qdap)
sprintf('%s*%s', dd2[,2],NAer(dd2[,3],''))
#[1] "AK2*"     "HFM1*PPT" "HFM1*"    "HFM1*GGT" "HFM1*"   

谢谢。因此,如果我在第2列中也有NAs,我可以只使用replace(dd2[,2],is.na(dd2[,2])?@MAPK-是的,没错。但是调用是
replace(dd2[,2],is.na(dd2[,2])”
。如果您愿意,可以对整个矩阵执行此操作。
replace(dd2,is.na(dd2),”)
ifelse(is.na(dd2[,3]),paste0(dd2[,2],"*"),paste(dd2[,2],dd2[,3],sep="*"))

#[1] "AK2*"     "HFM1*PPT" "HFM1*"    "HFM1*GGT" "HFM1*"
cbind(
    dd2, 
    combination = paste(dd2[,2], replace(dd2[,3], is.na(dd2[,3]), ""), sep = "*")
)
#      customer_sample_id Left.Gene.Symbols Right.Gene.Symbols combinations
# [1,] "AMLM12001KP"      "AK2"             NA                 "AK2*"      
# [2,] "AMLM12001KP"      "HFM1"            "PPT"              "HFM1*PPT"  
# [3,] "AMLM12001KP"      "HFM1"            NA                 "HFM1*"     
# [4,] "AMLM12001KP"      "HFM1"            "GGT"              "HFM1*GGT"  
# [5,] "AMLM12001KP"      "HFM1"            NA                 "HFM1*"    
library(qdap)
sprintf('%s*%s', dd2[,2],NAer(dd2[,3],''))
#[1] "AK2*"     "HFM1*PPT" "HFM1*"    "HFM1*GGT" "HFM1*"