在dplyr中在行方式和正常计算之间切换

时间:2016-02-18 14:52:34

标签: r dplyr

我想我只是一个小问题,但我不知道如何解决它。我想计算每行的repo init -u (path-to-xml-file) -m fetch.xml repo sync 值,并且列的排名取决于类别。

git branch

等级总是1,我猜是因为max函数调用但不确定。

还有一种方法可以自动使用除df <- data.frame(cat=rep(letters[1:5], each=5), a=runif(25), b=runif(25), c=runif(25)) df %>% group_by(cat) %>% rowwise() %>% mutate(MAX=max(a,b,c), RANK=rank(MAX)) 列以外的所有列吗? 提前谢谢!

1 个答案:

答案 0 :(得分:2)

改为使用pmax

df %>%
   group_by(cat) %>%
   mutate(MAX = pmax(a,b,c), RANK = rank(MAX))

#Source: local data frame [25 x 6]
#Groups: cat [5]
#
#      cat         a         b         c       MAX  RANK
#   (fctr)     (dbl)     (dbl)     (dbl)     (dbl) (dbl)
#1       a 0.8514743 0.4051721 0.5547097 0.8514743     3
#2       a 0.2599851 0.3559089 0.2878979 0.3559089     1
#3       a 0.1269608 0.6784622 0.1088647 0.6784622     2
#4       a 0.6764552 0.9013046 0.8811285 0.9013046     4
#5       a 0.9284667 0.3482491 0.9241917 0.9284667     5
#6       b 0.7799539 0.8811926 0.6788580 0.8811926     3
#7       b 0.8974519 0.8499074 0.1847301 0.8974519     4
#8       b 0.6819014 0.9334878 0.6150482 0.9334878     5
#9       b 0.2539325 0.1707934 0.2902184 0.2902184     1
#10      b 0.7913689 0.5555206 0.3349121 0.7913689     2
#..    ...       ...       ...       ...       ...   ...

pmaxpmin返回输入值的 p 并行最大值和最小值。这意味着,您不需要按行分组(使用rowwise)。

小例子:

pmax(1:5, 5:1)
#[1] 5 4 3 4 5

如果您需要更多灵活性,可以分两步完成:

df %>%
    rowwise() %>% 
    mutate(MAX = max(a,b,c)) %>% 
    group_by(cat) %>% 
    mutate(RANK = rank(MAX))

但是对于上述示例,pmax显然是一种更好的方法。

另一种选择是使用rowMeans

df %>% 
    mutate(MAX = rowMeans(.[c('a','b','c')])) %>% 
    group_by(cat) %>% 
    mutate(RANK = rank(MAX))

如果您不想手动指定列名,可以使用do.call并排除第一列:

df %>% mutate(MAX = do.call(pmax, .[-1]))