【问题标题】:R Wildcard data frame mergingR通配符数据帧合并
【发布时间】:2015-07-27 08:47:28
【问题描述】:

我正在尝试合并数据框和向量,而不是通过列中的精确字符串匹配,而是通过通配符字符串匹配。为了澄清,假设你有这个数据框:

v <-data.frame(X1=c("AGTACAGT","AGTGAAGT","TGTA","GTTA","GAT","GAT"),X2=c(1,1,1,1,1,1))
#         X1 X2
# 1 AGTACAGT  1
# 2 AGTGAAGT  2
# 3     TGTA  3
# 4     GTTA  4
# 5      GAT  5
# 6      GAT  6

我想通过为每个 AGT.{3}GT.{T|G}TAGAT 模式创建不同的颜色来创建数据框,并创建一个显示该颜色的新列 X3。所以是这样的:

#         X1 X2        X3
# 1 AGTACAGT  1 "#FE7F01"
# 2 AGTGAAGT  2 "#FE7F01"
# 3     TGTA  3 "#FE7F00"
# 4     GTTA  4 "#FE7F00"
# 5      GAT  5 "#FE8002"
# 6      GAT  6 "#FE8002"

到目前为止,我正在使用它为每个级别创建颜色,但我不知道如何计算有多少“通配符级别”而不是单个级别:

x <- nlevels(v$X1)
x.colors2 <- colorRampPalette(brewer.pal(8,"Paired"))(x)
G <- data.frame("X1"=levels(v$X1),"X3"=x.colors2)
v <- merge(v,G)

【问题讨论】:

    标签: regex r merge dataframe


    【解决方案1】:

    这里有一个解决方案。

    寻找模式:

    pat <- c("^AGT.{3}GT$", "^.(T|G)TA$", "^GAT$")
    n <- length(pat)
    indList <- lapply(pat, grep, v$X1)
    

    生成颜色:

    library(RColorBrewer)
    col <- colorRampPalette(brewer.pal(8, "Paired"))(n)
    

    为数据框添加颜色:

    colFull <- rep(col, sapply(indList, length))
    v$color <- colFull[order(unlist(indList))]
    

    结果:

    v
    #         X1 X2   color
    # 1 AGTACAGT  1 #A6CEE3
    # 2 AGTGAAGT  1 #A6CEE3
    # 3     TGTA  1 #979C62
    # 4     GTTA  1 #979C62
    # 5      GAT  1 #FF7F00
    # 6      GAT  1 #FF7F00
    

    【讨论】:

      猜你喜欢
      • 2013-10-18
      • 2018-03-18
      • 1970-01-01
      • 2021-09-10
      • 2023-03-05
      • 2014-04-14
      • 2017-04-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多