Повторяйте последовательность значений до конца в столбце фрейм данных

#r #dataframe

Вопрос:

В R у меня есть очень длинный фрейм данных, в котором есть два столбца следующим образом:

вверх низкий
5 10
10 20
20 30
NA NA
NA NA
NA NA
NA NA
NA Na
NA NA

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

вверх низкий
5 10
10 20
20 30
5 10
10 20
20 30
5 10
10 20
20 30

Как я могу это сделать в R? Какие коды можно использовать для этого? Пожалуйста, помогите мне. Спасибо

Комментарии:

1. Что определяет последовательность? Всегда ли это просто последовательность цифр до первого NA? Могут ли длины последовательностей отличаться между двумя столбцами?

Ответ №1:

вот tidyverse подход, использующий purrr :

 purrr::map_dfr(seq_len(3), ~df) %gt;%   na.omit()  
 up low 1 5 10 2 10 20 3 20 30 10 5 10 11 10 20 12 20 30 19 5 10 20 10 20 21 20 30  

Ответ №2:

Как насчет репликации фрейма данных без NAs, т. Е.

 sapply(na.omit(df),rep.int,times=(nrow(df) / nrow(na.omit(df)))) # v1 v2 # [1,] 5 10 # [2,] 10 20 # [3,] 20 30 # [4,] 5 10 # [5,] 10 20 # [6,] 20 30 # [7,] 5 10 # [8,] 10 20 # [9,] 20 30  

Ответ №3:

Я бы использовал rep и row.names :

 gt; df[rep(row.names(na.omit(df)), nrow(df) / nrow(na.omit(df))),]  up low 1 5 10 2 10 20 3 20 30 1.1 5 10 2.1 10 20 3.1 20 30 1.2 5 10 2.2 10 20 3.2 20 30 gt;   

Чтобы сбросить индекс:

 out lt;- df[rep(row.names(na.omit(df)), nrow(df) / nrow(na.omit(df))),] row.names(out) lt;- NULL  

 gt; out  up low 1 5 10 2 10 20 3 20 30 4 5 10 5 10 20 6 20 30 7 5 10 8 10 20 9 20 30 gt;