[英]Subsetting one matrix based in another matrix
我想選擇基於G
字符串的R
來獲得具有相同尺寸的分離輸出。 這是我的意見:
R <- 'pr_id sample1 sample2 sample3
AX-1 100 120 130
AX-2 150 180 160
AX-3 160 120 196'
R <- read.table(text=R, header=T)
G <- 'pr_id sample1 sample2 sample3
AX-1 AB AA AA
AX-2 BB AB NA
AX-3 BB AB AA'
G <- read.table(text=G, header=T)
這是我的預期產出:
AA <- 'pr_id sample1 sample2 sample3
AX-1 NA 120 130
AX-2 NA NA NA
AX-3 NA NA 196'
AA <- read.table(text=AA, header=T)
AB <- 'pr_id sample1 sample2 sample3
AX-1 100 NA NA
AX-2 NA 180 NA
AX-3 NA 120 NA'
AB <- read.table(text=AB, header=T)
BB <- 'pr_id sample1 sample2 sample3
AX-1 NA NA NA
AX-2 150 NA NA
AX-3 160 NA NA'
BB <- read.table(text=BB, header=T)
一些想法來執行它?
其他方式:
lev<-setdiff(as.character(unique(unlist(G[-1]))),NA)
lapply(lev, function(x) {res<-G[-1]==x;res[!res]<-NA;cbind(R[1],res*R[-1])})
我們將第二列中的'G'子集,轉換為矩陣,並使用其中的值拆分序列,創建一個具有NA(“G1”)的新矩陣並使用索引,我們替換對應於“ R“數據集值。
lapply(split(seq_along(as.matrix(G[-1])),
as.matrix(G[-1])), function(x) {
G1 <- matrix(NA, ncol=ncol(G)-1, nrow=nrow(G),
dimnames=list(NULL, names(G)[-1]))
G1[x] <- as.matrix(R[-1])[x]
data.frame(pr_id=R$pr_id, G1) })
#$AA
# pr_id sample1 sample2 sample3
#1 AX-1 NA 120 130
#2 AX-2 NA NA NA
#3 AX-3 NA NA 196
#$AB
# pr_id sample1 sample2 sample3
#1 AX-1 100 NA NA
#2 AX-2 NA 180 NA
#3 AX-3 NA 120 NA
#$BB
# pr_id sample1 sample2 sample3
#1 AX-1 NA NA NA
#2 AX-2 150 NA NA
#3 AX-3 160 NA NA
row.names(R) <- R[[1]]; R <- as.matrix(R[-1])
row.names(G) <- G[[1]]; G <- as.matrix(G[-1])
AA <- ifelse(G=="AA", R, NA)
AB <- ifelse(G=="AB", R, NA)
BB <- ifelse(G=="BB", R, NA)
或者使用lapply()
(最后三行):
lapply(c("AA", "AB", "BB"), function(x) ifelse(G==x, R, NA))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.