首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在另一个矩阵中添加一个矩阵

在另一个矩阵中添加一个矩阵
EN

Stack Overflow用户
提问于 2016-01-27 10:21:49
回答 3查看 88关注 0票数 4

我希望基于R字符串选择G,以获得具有相同维度的分离输出。这是我的意见:

代码语言:javascript
复制
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)

这是我的预期产出:

代码语言:javascript
复制
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)

有什么办法来表演吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-01-27 10:28:28

我们从第二列中子集'G‘,转换为矩阵,然后用其中的值拆分序列,用NA ("G1")创建一个新的矩阵,并使用索引替换对应于"R“数据集值的值。

代码语言:javascript
复制
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
票数 3
EN

Stack Overflow用户

发布于 2016-01-27 10:46:42

另一种方式是:

代码语言:javascript
复制
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])})
票数 4
EN

Stack Overflow用户

发布于 2016-01-27 10:53:49

代码语言:javascript
复制
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() (对于最后三行):

代码语言:javascript
复制
lapply(c("AA", "AB", "BB"), function(x) ifelse(G==x, R, NA))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35034632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档