2017-08-07 26 views
1

N-1這是我的數據框:組數據和計算時間

dput(test) 
structure(list(Branch = c("11 Oktomvri", "11 Oktomvri", "11 Oktomvri", 
"11 Oktomvri", "11 Oktomvri", "11 Oktomvri", "11 Oktomvri", "Aerodrom", 
"Aerodrom", "Aerodrom", "Aerodrom", "Aerodrom", "Aerodrom", "Aerodrom", 
"Aerodrom 2", "Aerodrom 2", "Aerodrom 2", "Aerodrom 2", "Aerodrom 2", 
"Aerodrom 2", "Aerodrom 2", "Bitola", "Bitola", "Bitola", "Bitola", 
"Bitola", "Bitola", "Bitola"), period = c("January", "February", 
"March", "April", "May", "June", "July", "January", "February", 
"March", "April", "May", "June", "July", "January", "February", 
"March", "April", "May", "June", "July", "January", "February", 
"March", "April", "May", "June", "July"), value = c(1513, 1511, 
1520, 1524, 1508, 1504, 1517, 1364, 1381, 1400, 1403, 1401, 1406, 
1430, 674, 687, 689, 690, 696, 705, 715, 4400, 4393, 4365, 4342, 
4345, 4373, 4389)), .Names = c("Branch", "period", "value"), row.names = c(NA, 
-28L), class = c("grouped_df", "tbl_df", "tbl", "data.frame"), vars = c("Branch", 
"period"), drop = TRUE, indices = list(3L, 1L, 0L, 6L, 5L, 2L, 
    4L, 10L, 8L, 7L, 13L, 12L, 9L, 11L, 17L, 15L, 14L, 20L, 19L, 
    16L, 18L, 24L, 22L, 21L, 27L, 26L, 23L, 25L), group_sizes = c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), biggest_group_size = 1L, labels = structure(list(
    Branch = c("11 Oktomvri", "11 Oktomvri", "11 Oktomvri", "11 Oktomvri", 
    "11 Oktomvri", "11 Oktomvri", "11 Oktomvri", "Aerodrom", 
    "Aerodrom", "Aerodrom", "Aerodrom", "Aerodrom", "Aerodrom", 
    "Aerodrom", "Aerodrom 2", "Aerodrom 2", "Aerodrom 2", "Aerodrom 2", 
    "Aerodrom 2", "Aerodrom 2", "Aerodrom 2", "Bitola", "Bitola", 
    "Bitola", "Bitola", "Bitola", "Bitola", "Bitola"), period = c("April", 
    "February", "January", "July", "June", "March", "May", "April", 
    "February", "January", "July", "June", "March", "May", "April", 
    "February", "January", "July", "June", "March", "May", "April", 
    "February", "January", "July", "June", "March", "May")), row.names = c(NA, 
-28L), class = "data.frame", vars = c("Branch", "period"), drop = TRUE, .Names = c("Branch", 
"period"))) 

我不知道如何根據period_n組基於科和週期的數據,並計算值 - period_n-1 。

輸出應該是:

city  period value diff_n_1 
Bitola March  4365 -28 
Bitola April  2000 13 

我attepmt:

results <- sample2 %>% 
    group_by(Branch, period) %>% 
    arrange(Branch) %>% 
    mutate(lagged_period = lag(value), client_diff = value - lagged_period) 

我不知道怎麼拉斷的最後一行。

任何想法?

回答

2

我認爲你已經把它接近了,但你不需要Periodgroup_by,因爲那真的是我們使用的變量lag。目前,您的上述工作完全由NAs產生,因爲每個定義的組中只有一個元素(因此沒有滯後可用)。

這應該工作:

library(dplyr) 

sample2 %>% 
    group_by(Branch) %>% 
    arrange(Branch) %>% 
    mutate(lagged_period = lag(value), 
     client_diff = value - lagged_period) 

然後,當然,如果你想從計算字段刪除NAs,你可以管到上述情況:

filter(!is.na(client_diff)) 
+0

謝謝你,Dave! – Prometheus