2015-02-11 21 views
2

我有這個數據幀:的R - Dplyr - 從最後一排VS實際行比較值

year month UserID 
1 2014 11  3527 
2 2014 12  4916 
3 2015 1   2445 

而想要添加一個 「變」 列:計算公式爲:ActualRow/LASTROW - 1 。

這是我的代碼:

UserID_unicos2 <- UserID_unicos1 %>% 
        mutate(variation=(UserID/lag(UserID) - 1)) %>% 
        mutate(prev=lag(UserID)) 

然而,它只是返回:

year month UserID variation prev 
1 2014  11  3527  NA  NA 
2 2014  12  4916 0.3938191 3527 
3 2015  1  2445  NA  NA 

正如你所見,它只是返回2014-12的值。而不是:2015-01。怎麼來的?謝謝。應用

我的數據後,「dput()」:

structure(list(year = c(2014L, 2014L, 2015L), month = c(11L, 
12L, 1L), UserID = c(3527L, 4916L, 2445L)), .Names = c("year", 
"month", "UserID"), row.names = c(NA, -3L), class = c("grouped_df", 
"tbl_df", "tbl", "data.frame"), vars = list(year), drop = TRUE, indices = list(
    0:1, 2L), group_sizes = c(2L, 1L), biggest_group_size = 2L, labels = structure(list(
    year = 2014:2015), class = "data.frame", row.names = c(NA, 
-2L), .Names = "year", vars = list(year))) 
+0

@akrun,我dplyr 0.4.1,我不明白這個「dplyr :: mutate(variation = ..)」,我應該把它放在哪裏?謝謝。 – 2015-02-11 16:24:27

+0

這可能是一個分組問題。我沒有使用'dput',因爲它有一些問題 – akrun 2015-02-11 16:26:08

+0

@akrun,使用時返回相同的數據:UserID_unicos1%>%dplyr :: mutate – 2015-02-11 16:26:35

回答

4

根據你dput,你的數據是由year分組,這就是爲什麼你看到這樣的結果。試試這個:

UserID_unicos1 %>% 
    ungroup() %>% 
    mutate(variation=(UserID/lag(UserID) - 1), 
     prev=lag(UserID)) 

另外請注意,您可以在同一mutate只是逗號分隔創建兩列。

+0

謝謝@docendo discimus – 2015-02-11 16:30:49

+0

不客氣,@OmarGonzales – 2015-02-11 16:31:35