如何使用dplyr / magrittr管道将字符串转换为因子并设置对比度

时间:2017-07-17 09:40:53

标签: r dplyr magrittr

我有一个相当具体的问题:我怎样才能将字符串变成一个因子并在管道中设置它的对比?

让我说我有一个如下的

tib <- data_frame (a = rep(c("a","b","c"),3, each = T), val = rnorm(9))

现在,我可以使用两个单独的行

tib$a <- factor(tib$a)
contrasts(tib$a) <- contr.sum(3)

但是如果我想在dplyr管道中执行相同的操作呢?

2 个答案:

答案 0 :(得分:3)

R中的所有内容都是一个功能。你只需要知道它叫什么。在这种情况下,它<header> ..... <div class="row"> <div class="container"> <div class="col-sm-4"> Telephone </div> <div class="col-sm-4"> email </div> <div class="col-sm-4"> support </div> </div> </div> </header> 将对比分配给一个因子。

contrasts<-

答案 1 :(得分:2)

好吧,这是一个有趣的谜题,因为我之前从未使用过do(),但这对我有用:

tib <- data.frame (a = rep(c("a","b","c"),3, each = T), val = rnorm(9)) 

tib = tib %>% mutate(a = factor(a)) %>% do({function(X) {contrasts(X$a) <- contr.sum(3); return(X)}}(.))

contrasts(tib$a)

结果:

  [,1] [,2]
a    1    0
b    0    1
c   -1   -1

希望这有帮助!

  

编辑:评论请求解释,见下文:

这对我来说也是新的。据我了解,在do()调用中,它表示

{func}(.)

这意味着应该使用参数。来调用函数,它是do调用中的数据帧。在func中,我们将函数指定为

function(X) {operation to perform on X}

所以将它们加在一起:

{function(X) {operation to perform on X}}(.)

这意味着什么。在函数X中用作参数,因此它基本上成为&#39;操作来执行。&#39;