首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何融化不同复制的列、条件下的字符值

如何融化不同复制的列、条件下的字符值
EN

Stack Overflow用户
提问于 2014-12-06 16:20:11
回答 1查看 36关注 0票数 0

我有一个data.frame,看起来像:

代码语言:javascript
运行
复制
    mi      pos L08.92.s1 L08.92.s2 LD09.911.s1 LD09.911.s2 Storn.s1 Storn.s2 Storn.s3 Storn.s4 Tre
1 snp1 12713760        CC        CT          CC          CC       TT       TT       TT       TT  CC
2 snp2  8219379        AA        AA          --          AA       AA       AA       AA       AA  --
3 snp3  6595215        GG        GG          GG          GG       GG       --       GG       GT  GT
4 snp4 42348146        CC        CC          CC          CC       CC       CA       --       CA  AA
5 snp5  1809563        GG        GG          TT          TG       GG       GG       GG       GG  TT
6 snp6 34285723        TT        CC          --          --       TT       TT       TT       TT  CC
7 snp7 21533194        AA        AA          AG          --       AA       GG       GG       GG  AG

我希望最终的数据框架如下所示:

代码语言:javascript
运行
复制
    mi      pos L08.92 LD09.911 Storn Tre
1 snp1 12713760     CC       CC    TT  CC
2 snp2  8219379     AA       AA    AA  --
3 snp3  6595215     GG       GG    GG  GT
4 snp4 42348146     CC       CC    CC  AA
5 snp5  1809563     GG       TT    GG  TT
6 snp6 34285723     HH       --    TT  CC
7 snp7 21533194     AA       AG    HH  AG

程序:每个样品的复制柱将被融化成一个柱。该值将从复制中获取,如下规则所示:

  • 如果所有复制的值相同,则不更改;
  • 优先顺序接受一个值是:两个相同的字母>两个不同的字母>“-”;
  • 如果复制中存在两种类型的"homo“值,则改为"HH”。

谢谢你的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-06 17:02:59

你可以试试

代码语言:javascript
运行
复制
indx <- gsub("[.][^.]+$", "", colnames(df)[-(1:2)])
lst <- split(colnames(df)[-(1:2)], indx)
Un <- c('AA', 'CC', 'GG', 'TT')

df2 <- df[,1:2]
df2[unique(indx)] <- lapply(lst, function(x)
         apply(df[x], 1, function(y) {y1 <- unique(y)
                  y2 <- y1[y1 %in% Un]
                 ifelse(length(y2)==0, sort(y1, decreasing=TRUE),
                   ifelse(length(y2)==2, 'HH', y2))
               }))

df2
#    mi      pos L08.92 LD09.911 Storn Tre
#1 snp1 12713760     CC       CC    TT  CC
#2 snp2  8219379     AA       AA    AA  --
#3 snp3  6595215     GG       GG    GG  GT
#4 snp4 42348146     CC       CC    CC  AA
#5 snp5  1809563     GG       TT    GG  TT
#6 snp6 34285723     HH       --    TT  CC
#7 snp7 21533194     AA       AG    HH  AG

数据

代码语言:javascript
运行
复制
 df <- structure(list(mi = c("snp1", "snp2", "snp3", "snp4", "snp5", 
 "snp6", "snp7"), pos = c(12713760L, 8219379L, 6595215L, 42348146L, 
1809563L, 34285723L, 21533194L), L08.92.s1 = c("CC", "AA", "GG", 
"CC", "GG", "TT", "AA"), L08.92.s2 = c("CT", "AA", "GG", "CC", 
"GG", "CC", "AA"), LD09.911.s1 = c("CC", "--", "GG", "CC", "TT", 
"--", "AG"), LD09.911.s2 = c("CC", "AA", "GG", "CC", "TG", "--", 
"--"), Storn.s1 = c("TT", "AA", "GG", "CC", "GG", "TT", "AA"), 
Storn.s2 = c("TT", "AA", "--", "CA", "GG", "TT", "GG"), Storn.s3 = c("TT", 
"AA", "GG", "--", "GG", "TT", "GG"), Storn.s4 = c("TT", "AA", 
"GT", "CA", "GG", "TT", "GG"), Tre = c("CC", "--", "GT", 
"AA", "TT", "CC", "AG")), .Names = c("mi", "pos", "L08.92.s1", 
"L08.92.s2", "LD09.911.s1", "LD09.911.s2", "Storn.s1", "Storn.s2", 
"Storn.s3", "Storn.s4", "Tre"), class = "data.frame", row.names = c(NA, 
-7L))
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27333666

复制
相关文章

相似问题

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