2016-08-16 3 views
0

Мои данные выглядит следующим образом:Расширить диапазон (низкий, высокий) до значений с индексом

df <- data.frame(
    index = c(1, 2, 3), 
    lo = c(1, 3, 6), 
    hi = c(2, 5, 10) 
) 

# index lo hi 
# 1  1 1 2 
# 2  2 3 5 
# 3  3 6 10 

Я хочу, чтобы привести в порядок низкий - высокий диапазон расширенных значений:

df_new <- data.frame(
    index = c(1, 1, 2, 2, 2, 3, 3, 3, 3, 3), 
    value = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) 
) 

# index value 
# 1  1  1 
# 2  1  2 
# 3  2  3 
# 4  2  4 
# 5  2  5 
# 6  3  6 
# 7  3  7 
# 8  3  8 
# 9  3  9 
# 10  3 10 
+0

Link? Не удалось найти до публикации @DirtySockSniffer – emehex

+5

Еще не нашли его, но вы можете сделать что-то вроде 'stack (with (df, setNames (Map (": ", lo, hi), index)))' или 'library (Таблица данных); setDT (df) [, lo: hi, by = index] ' –

+0

Или' library (dplyr); df%>% group_by (index)%>% do (data.frame (value =. $ lo:. $ hi)) '. – Axeman

ответ

2

Два варианта с dplyr и tidyr, второй подход работают, когда нет дублированных индексов в кадре данных:

library(dplyr); library(tidyr) 
df %>% rowwise() %>% summarise(index = index, value = list(lo:hi)) %>% unnest() 

# Source: local data frame [10 x 2] 

# index value 
# <dbl> <int> 
# 1  1  1 
# 2  1  2 
# 3  2  3 
# 4  2  4 
# 5  2  5 
# 6  3  6 
# 7  3  7 
# 8  3  8 
# 9  3  9 
# 10  3 10 


df %>% group_by(index) %>% summarise(value = list(lo:hi)) %>% unnest() 

# Source: local data frame [10 x 2] 

# index value 
# <dbl> <int> 
# 1  1  1 
# 2  1  2 
# 3  2  3 
# 4  2  4 
# 5  2  5 
# 6  3  6 
# 7  3  7 
# 8  3  8 
# 9  3  9 
# 10  3 10 
+0

как вы печатали и копировали и вставляли таблицы вывода в этот красивый формат? – emehex

+0

Это лучше, чем у вас? Я не считаю их различием? – Psidom

+0

Я напечатал df на консоли. Затем я копирую и вставляю вывод в скрипт. Затем прокомментировал это. Затем с отступом ... супер руководство. У вас есть более быстрый способ? – emehex

Смежные вопросы