我正在努力做到'聪明'并将其输入到汇总函数中(在这种情况下: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
我的代码出了什么问题?
如何做这种类型的管道?我坚持如何基本上将一列作为向量隔离并在其上调用一个函数 如果已经有类似的问题,那么很多人都会为这个骗局道歉,如果你能指出我的话,我将非常感激。
答案 0 :(得分:2)
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