Как я могу объединить кадры данных неравной длины, но известной длины фрагмента? - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть модель, где люди могут умереть и размножаться.Я записываю информацию из модели через заданные интервалы.Я знаю личность людей и номер итерации, из которого я взял выборку:

df1<-data.frame(
who= c(1,2,3,4,1,2,3,3,5),
iteration = c(1,1,1,1,2,2,2,3,3)
)
df1

Но у каждого из них есть список номеров, которые я хочу отследить.Поскольку с каждым человеком связано более одного числа, я получаю два фрейма данных неравного размера выборки.

df2 <- data.frame(values=c(1,1, # id = 1
                           1,2, # id = 2
                           2,1, # id = 3
                           0,0, # id = 4
                           1,1, # id = 1
                           1,2, # id = 2
                           2,1, # id = 3
                           2,1, # id = 3
                           0,0)) # id = 5
df2

Я хочу связать их, чтобы переменная 'who' соответствовала своему значению.Я сделал следующее, чтобы разбить значения на куски нужного размера, но теперь я застрял.

df3 <- split(df2$values, ceiling(seq_along(df2$values)/2))

Я должен получить что-то похожее на это:

who iteration value1 value2
1      1      1       1
2      1      1       2
3      1      2       1
4      1      0       0
1      2      1       1
2      2      1       2
3      2      2       1
3      3      2       1  
5      3      0       0

1 Ответ

0 голосов
/ 18 февраля 2019

Здесь мы split столбец 'values' на основе индекса группировки, созданного с помощью %% в list из vector с, затем создаем list элементную площадку с NA в конце(в случае, если количество элементов меньше), присваивая length<- максимальному length из list элемента

lst <- split(df2$values, (seq_along(df2$values)-1) %% 2 +1)
m1 <- do.call(cbind, lapply(lst, "length<-", max(lengths(lst))))
cbind(df1, m1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...