如何使用不同的连接器粘贴列

时间:2019-06-03 14:16:48

标签: r

例如

df<-data.frame(chr=c(3,4,5),
 start=c(11,12,13),
 end=c(21,22,23))
df
  chr start end
1   3    11  21
2   4    12  22
3   5    13  23

我的问题是使用“:”和“-”粘贴三列,以使df$anno的期望输出为:

df
  chr start end    anno
1   3    11  21 3:11-21
2   4    12  22 4:12-22
3   5    13  23 5:13-23

5 个答案:

答案 0 :(得分:10)

我会使用sprintf

df <- within(df, anno <- sprintf("%d:%d-%d", chr, start, end))

#  chr start end    anno
#1   3    11  21 3:11-21
#2   4    12  22 4:12-22
#3   5    13  23 5:13-23

答案 1 :(得分:5)

paste是矢量化的。因此,我们可以直接在之间插入带有指定分隔符的列

df$anno <- with(df, paste0(chr, ":", start, "-", end))
df$anno
#[1] "3:11-21" "4:12-22" "5:13-23"

或使用str_c

library(tidyverse)
df %>%
    mutate(anno = str_c(chr, ":", start, "-", end))

答案 2 :(得分:2)

您也可以使用更简单的方法进行操作:

a$anno<-paste(paste(a$chr, a$start, sep = ":"), a$end, sep = "-")

答案 3 :(得分:1)

这是另一个有趣的地方,

sub('-', ':', do.call(paste, c(df, sep = '-')))
#[1] "3:11-21" "4:12-22" "5:13-23"

答案 4 :(得分:0)

glue包对于可读性总是有很大帮助:

library(glue)
transform(df, anno = glue("{chr}:{start}-{end}"))
#   chr start end    anno
# 1   3    11  21 3:11-21
# 2   4    12  22 4:12-22
# 3   5    13  23 5:13-23