2017-03-06 90 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