【发布时间】:2020-10-27 17:18:41
【问题描述】:
我有一个包含核苷酸序列(包含 NA)的矩阵,如下所示:
n.mat
samp1 <- c("a","c","a",NA,"t","c")
samp2 <- c("a","c","t","t",NA,"a")
samp3 <- c("a","g","g","c","a","c")
samp4 <- c("a","g",NA,"g","g", NA)
samp5<- c(NA, "g","g","g","t","g")
n.mat <- rbind(samp1,samp2,samp3,samp4,samp5)
[,1] [,2] [,3] [,4] [,5] [,6]
samp1 "a" "c" "a" NA "t" "c"
samp2 "a" "c" "t" "t" NA "a"
samp3 "a" "g" "g" "c" "a" "a"
samp4 "a" "g" NA "g" "g" NA
samp5 NA "g" "g" "g" "t" "g"
我还有一个包含序列名称的两列数据框:
df
df <- data.frame(
X1 = c("samp1", "samp2", "samp3", "samp4", "samp5"),
X2 = c("samp2", "samp5", "samp1", "samp3", "samp2"))
X1 X2
1 samp1 samp2
2 samp2 samp5
3 samp3 samp1
4 samp4 samp3
5 samp5 samp2
我想用数据框中df$X2 列指示的矩阵中另一行的核苷酸/值填充矩阵中一行的空白。
例如:矩阵中的samp1 在第四列的行中有一个NA。所以我想从samp2 中取出同一列中的字符串(由X2 列中的数据框表示)。对于samp2,我想通过从samp5 获取字符串来填充NA(由X2 列中的数据框指示)。
如果行中没有NA 和samp3 一样,则什么也不做。
如果一行中有两个NAs(就像在samp4 中一样),那么我想从samp3 两列中获取两个字符串。
我尝试了以下代码:
replace.na <- function(n.mat,val) {
i <- is.na(n.mat)
j <- which(i)
k <- which(!i)
n.mat[j[j > k[length(k)]]] <- val
n.mat
}
n.mat[,-1] <- t(apply(matrix[,-1],1,replace.na))
但我不太确定如何包含 df 表来替换 NAs。
【问题讨论】: