Как сделать переменную в наборе данных, содержащем вектор всех чисел между двумя другими переменными? - PullRequest
0 голосов
/ 10 декабря 2018

Вот пример данных.

x <- c(1,2,3)
y <- c(10,10,10)

d <- data.frame(x, y)

Я хочу сгенерировать третью переменную (z), содержащую вектор всех значений в x: y.Например, первое значение z должно быть c (1,2,3,4,5,6,7,8,9,10).

Как я могу это сделать?Попытка d$z <- d$x:d$y просто дает ошибку: «числовое выражение имеет 3 элемента: используется только первый».

Ответы [ 3 ]

0 голосов
/ 10 декабря 2018
 mapply(":", x, y)

То же, что и ответ RLave, но без дополнительных пакетов.

0 голосов
/ 10 декабря 2018

Также база R:

d$z <- lapply(1:nrow(d), function(i) with(d[i, ], x:y))

> str(d)
'data.frame':   3 obs. of  3 variables:
 $ x: num  1 2 3
 $ y: num  10 10 10
 $ z:List of 3
  ..$ : int  1 2 3 4 5 6 7 8 9 10
  ..$ : int  2 3 4 5 6 7 8 9 10
  ..$ : int  3 4 5 6 7 8 9 10
0 голосов
/ 10 декабря 2018

С пакетом purrr и функцией map2:

purrr::map2(x,y, function(x,y) x:y)

# [[1]]
# [1]  1  2  3  4  5  6  7  8  9 10
# 
# [[2]]
# [1]  2  3  4  5  6  7  8  9 10
# 
# [[3]]
# [1]  3  4  5  6  7  8  9 10

Конечно, это должно дать list из-за разной длины.Обратите внимание, что то же самое может быть достигнуто с помощью простого цикла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...