在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*"