Как вставить столбцы, используя разные соединители - PullRequest
3 голосов
/ 03 июня 2019

Например,

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 ]

10 голосов
/ 03 июня 2019

Я бы использовал 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
5 голосов
/ 03 июня 2019

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 голосов
/ 03 июня 2019

Также вы можете сделать это намного проще:

a$anno<-paste(paste(a$chr, a$start, sep = ":"), a$end, sep = "-")
1 голос
/ 03 июня 2019

Вот еще один для развлечения,

sub('-', ':', do.call(paste, c(df, sep = '-')))
#[1] "3:11-21" "4:12-22" "5:13-23"
0 голосов
/ 05 июня 2019

Пакет 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...