Как я могу использовать функцию seq для двух столбцов в кадре данных? - PullRequest
1 голос
/ 22 апреля 2020

Предположим, у меня есть:

x <- c(1, 2, 3, 4, 5)
y <- c(2, 3, 6, 8, 10)
my.list <- list(start = x, end = y) %>% as.data.frame()

Мне нужно определить новую переменную, которая содержит seq (начало, конец) или начало: конец, сохраненный в этой переменной, я хочу, чтобы последовательность чисел в строках, например, 1 2 для первого ряда и 3 4 5 6 для третьего ряда.

Большое спасибо

1 Ответ

1 голос
/ 22 апреля 2020

Мы можем использовать map2, чтобы получить seq значение соответствующих значений 'start', 'end', чтобы создать list из vector s

library(dplyr)
library(purrr)
my.list %>% 
   mutate(new = map2(start, end, `:`))
#  start end               new
#1     1   2              1, 2
#2     2   3              2, 3
#3     3   6        3, 4, 5, 6
#4     4   8     4, 5, 6, 7, 8
#5     5  10 5, 6, 7, 8, 9, 10

Другой вариант: rowwise

my.list %>% 
    rowwise %>% 
    mutate(new = list(start:end))
# A tibble: 5 x 3
# Rowwise: 
#  start   end new      
#  <dbl> <dbl> <list>   
#1     1     2 <int [2]>
#2     2     3 <int [2]>
#3     3     6 <int [4]>
#4     4     8 <int [5]>
#5     5    10 <int [6]>

Или с data.table, как @markus упоминается в комментариях

library(data.table)
setDT(my.list)[, V3 := Map(`:`, start, end)]

Или с Map из base R

Map(`:`, my.list$start, my.list$end)
...