2017-03-06 67 views
-1

我有一個數據幀(df):其中包含條目的順序兩因素GROUP_BY然後添加行數R dplyr

a <- c("up","up","up","up","down","down","down","down") 
b <- c("l","r","l","r","l","l","r","r") 


df <- data.frame(a,b) 

我想添加第三個柱(c),通過a列分組和b,看起來是這樣的:

a b c 
1 up l 1 
2 up r 1 
3 up l 2 
4 up r 2 
5 down l 1 
6 down l 2 
7 down r 1 
8 down r 2 

我曾嘗試使用dplyr解決方案都沒有奏效:

order <- df %>% 
    group_by(a) %>% 
    group_by(b) %>% 
    mutate(c = row_number()) # This counts the order based on `b`, ignoring `a` 

order <- df %>% 
     group_by(a) %>% 
     group_by(b) %>% 
     mutate(c = seq_len(n())) # This counts the order based on `b`, ignoring `a`  

我寧願如果可能的話用dplyr和管道保持,但其他建議,歡迎

+1

group_by(a,b)而不是2個group_by語句有什麼問題? –

+1

請注意,默認情況下'group_by'會覆蓋以前的組。要麼使用單個調用,要麼使用'add = TRUE'。 – Axeman

回答

2

您需要在同一個group_by語句結合ab

order <- df %>% 
    group_by(a, b) %>% 
    mutate(c = row_number()) 

order 

# Source: local data frame [8 x 3] 
# Groups: a, b [4] 
# 
#  a  b  c 
# <fctr> <fctr> <int> 
# 1  up  l  1 
# 2  up  r  1 
# 3  up  l  2 
# 4  up  r  2 
# 5 down  l  1 
# 6 down  l  2 
# 7 down  r  1 
# 8 down  r  2