输入汇总功能,输出长度> 1

时间:2018-04-08 16:52:28

标签: r dplyr

我正在努力做到'聪明'并将其输入到汇总函数中(在这种情况下:quantile),输出长度为> 1,但没有使用summarise_at

虚拟数据:

set.seed(1)
id = 1:20
value = sample (20:100, size = 20)
my_dat = data.frame( id, value)

因此。我的方法如下:

require(dplyr)
#This data and operations are obviously simplified and do not reflect the entire complexity of my real data, but melt it down to the core of the problem)

my_dat %>% quantile(.$value, probs = seq(0, 1, 0.25), na.rm = TRUE)
#interestingly, I have to specify both the probs argument (why??) 
#and add na.rm = TRUE in order to avoid a warning, although there are no NA's... ???

给出结果,但不是正确的结果,因为它基本上将两列作为参数。

 0%   25%   50%   75%  100% 
 1.00 10.75 20.50 50.25 98.00

我的代码出了什么问题?

如何做这种类型的管道?我坚持如何基本上将一列作为向量隔离并在其上调用一个函数 如果已经有类似的问题,那么很多人都会为这个骗局道歉,如果你能指出我的话,我将非常感激。

2 个答案:

答案 0 :(得分:2)

r中的

quantile函数只是将向量作为第一个参数而不是数据帧。所以你可以这样做:

my_dat$value%>%quantile(seq(0, 1, 0.25))
   0%   25%   50%   75%  100% 
24.00 42.50 65.50 84.25 98.00

如果您确实需要将管道用于整个数据框,请使用大括号:

 my_dat%>%{quantile(.$value,seq(0, 1, 0.25))}
   0%   25%   50%   75%  100% 
24.00 42.50 65.50 84.25 98.00 

答案 1 :(得分:2)

有几个管道运营商。例如 exposition-pipe operator %$%(包magrittr):

  

将lhs中的名称暴露给rhs表达式。这很有用   函数没有内置数据参数。

my_dat %$% quantile(value)

   0%   25%   50%   75%  100% 
24.00 42.50 65.50 84.25 98.00