2016-03-17 2 views
-3

У меня есть большой DF. Первый столбец называется «ID», кроме того, у меня есть столбец «дни». У меня есть более 4000 различных значений в ID, которые повторяются, а в столбцах «дни» у меня есть значения от -60 до 60. Моя проблема заключается в том, что не все значения идентификатора имеют все значения от -60 до 60 в «дни» и Мне нужно, чтобы любое значение ID имело весь диапазон в «дни» (от -60 до 60).Как добавить строки в столбец на основе значений в другом столбце

DF <- data.frame(ID=c(1,2,3...4000), days=c(-60,-59,-58....60),...) 

Мне нужно заполнить столбец «дни» недостающими значениями для каждого значения «ИД».

Извините, если я недостаточно ясен.

спасибо!

Это пример моего DF

Data.frame': 8 obs. of 8 variables: 
$ Farm  : Factor w/ 7 levels "Abel","Bollant",..: 1 1 1 1 1 1 1 1 
$ ID  : int 10000 10000 10000 10000 10000 10000 10000 10000 
$ Date  : Factor w/ 395 levels "1/1/2015","1/10/2015",..: 63 89 85 66 64 77 65 36 
$ Rum  : int 622 619 706 455 563 594 589 681 
$ Act  : int 438 484 466 449 471 546 449 424 
$ FDAT  : Factor w/ 304 levels "1/1/2015","1/10/2015",..: 46 46 46 46 46 46 46 46 
$ daystocalv: int -10 -15 -12 -21 -19 -31 -20 9 
$ Prepartum : int 1 1 1 1 1 1 1 0 

ответ

1

Вы можете показать другие свои усилия, когда вы берете время, чтобы создать небольшой пример вашей проблемы. Мы подчеркиваем, что по трем причинам: 1) он помогает другим понять вашу проблему, 2) он позволяет каждому самому попробовать сам код, чтобы выработать решение, и 3) много раз вы найдете свой ответ при создании самого примера.

Пример:

df <- data.frame(x=rep(LETTERS[1:3], c(2,3,5)), y=c(-2,0,-1,0,1, -2,-1,0,1,2), stringsAsFactors=F) 
df 
# x y 
# 1 A -2 
# 2 A 0 
# 3 B -1 
# 4 B 0 
# 5 B 1 
# 6 C -2 
# 7 C -1 
# 8 C 0 
# 9 C 1 
# 10 C 2 

В этом примере имеет три идентификаторов с диапазоном от -2 до 2. ИД «C» завершено, но другие не имеют все значения. Для создания требуется всего 20 секунд, но это очень помогает визуализировать проблему.

Решение:

complete работы, глядя на группы и расширение для заполнения недостающих значений:

library(tidyr) 
complete(df, x, y) 
# Source: local data frame [15 x 2] 
# 
#  x  y 
# (chr) (dbl) 
# 1  A -2 
# 2  A -1 
# 3  A  0 
# 4  A  1 
# 5  A  2 
# 6  B -2 
# 7  B -1 
# 8  B  0 
# 9  B  1 
# 10  B  2 
# 11  C -2 
# 12  C -1 
# 13  C  0 
# 14  C  1 
# 15  C  2 
+0

Спасибо за вашу помощь. Я пытаюсь использовать * expand * (tiplyr). развернуть (ДФ, гнездящихся (ДФ $ х), ДФ $ у). Затем у меня есть все дни для каждого ID (x = ID, y = дни). Я создал вектор, и теперь я связываю, чтобы объединить исходный df с вектором, но я запускаю память, поэтому я не могу. Моя идея состоит в том, чтобы развернуть (вложенные) все переменные df, а затем слить. Как я могу вложить все переменные df? –

+0

Вы запутываете 'dplyr' и' tidyr'? Нет пакета или функции под названием 'tiplyr', которые я знаю –

+0

извините, это tidyr –