2013-03-10 3 views
-2

Так как вы можете видеть, у меня есть цена и день столбцы нижеR программирование - Как найти разницу между двумя значениями в определенных строках

Price Day 
    2 1 
    5 2 
    8 3 
    11 4 
    14 5 
    17 6 
    20 7 
    23 8 
    26 9 
    29 10 
    32 11 
    35 12 
    38 13 
    41 14 
    44 15 
    47 16 
    50 17 
    53 18 
    56 19 
    59 20 

Затем я хочу выход ниже

Difference Day 
    12 5 
    15 10 
    15 15 
    15 20 

В принципе, у меня разница в ценах каждые 5 дней ... она просто в основном вычитает 5-й день с первого дня ..... а затем 10-й день с 5-м днем ​​и т. Д. ... Я уже сделал код, который будет разделите свои данные на 5-дневные интервалы ... но я хочу, чтобы код, который позволит мне минус 5-й с 1-го дня цен .... th е 10-й день с ценами на 5-й день ... и т. д. Я опубликовал аналогичный вопрос несколько дней назад ... вот ссылка: How to extract certain rows .... все ответы были полезными, и я вроде как пытался их раньше, но они появляются не работать? Любые другие предложения были бы здоровы: D Но я действительно не получаю вывод, что я хочу .... У меня есть данные до 3000 дней .... спасибо у

+1

@AndrewKibet, почему вы снова задаете один и тот же вопрос? Если он не работает, тогда вы должны оставить комментарий в ответ на вопрос *, что конкретно * не работает; * не * создайте новый вопрос. – Arun

+1

Echoing @Arun, вы должны быть в состоянии предоставить * другой * пример, который реплицирует вашу проблему. Те, которые там работают на вашем образце данных, который вы здесь предоставили, поэтому мы действительно не можем сделать больше, если вы не разделите то, что вы сделали, чтобы получить проблему. – A5C1D2H2I1M1N2O1R2T1

+0

Извините, что .... но я постарался поставить комментарий, но его не появлялось ... моя проблема была в том, что я пытался данные [c (1, seq (5, nrow (data), 5)),] , diff (данные [c (1, seq (5, nrow (data), 5)), «Time»] ..... Я получаю результат NULL ... также вместо того, чтобы ДЕНЬ был разделен на 5 дней интервалы его цены делится на 5 ....: O –

ответ

1

Создать пример данные:

tmp <- structure(list(Price = c(2L, 5L, 8L, 11L, 14L, 17L, 20L, 23L, 
26L, 29L, 32L, 35L, 38L, 41L, 44L, 47L, 50L, 53L, 56L, 59L), 
    Day = 1:20), .Names = c("Price", "Day"), class = "data.frame", row.names = c(NA, 
-20L)) 

Определение индекса дней: разница

ind <- seq(5, nrow(tmp), by=5) 

Расчета для индексных дней, матч с фактическим днем:

data.frame(day = tmp[ind, "Day"], diff = diff(tmp[c(1, ind), "Price"])) 
+0

Как получить эту строку без копирования или вставки чего-либо? c (2L, 5L, 8L, 11L, 14L, 17L, 20L, 23L, 26L, 29L , 32L, 35L, 38L, 41L, 44L, 47L, 50L, 53L, 56L, 59L) –

+0

@AndrewKibet Введите его? – Ista