R 使用mutate_at跨嵌套数据帧映射

R 使用mutate_at跨嵌套数据帧映射,r,R,我试图在嵌套了许多变量的数据帧中应用map_dbl。嵌套变量的每个元素都包含一个10000个数字的向量。我有一个数据框,它有多个变量,就像这样 对于嵌套变量的每个元素,我想提取2.5、50和97.5个百分位数。我尝试用map_dbl来实现这一点,它适用于单个嵌套变量的每个元素。不过,我正在努力提高效率,不知道是否有人能帮上忙 我在下面给出了一个可复制的小例子 # creates a function to extract 50th 2.5th and 97.5th centiles perce

我试图在嵌套了许多变量的数据帧中应用map_dbl。嵌套变量的每个元素都包含一个10000个数字的向量。我有一个数据框,它有多个变量,就像这样

对于嵌套变量的每个元素,我想提取2.5、50和97.5个百分位数。我尝试用map_dbl来实现这一点,它适用于单个嵌套变量的每个元素。不过,我正在努力提高效率,不知道是否有人能帮上忙

我在下面给出了一个可复制的小例子

# creates a function to extract 50th 2.5th and 97.5th centiles 
percentile <- function (x,y){
              map_dbl(x, quantile(~x,y))
              }


x <- tibble(a = list(c(rnorm(10,1)),c(rnorm(10,2)), c(rnorm(10,3)), c(rnorm(10,4))),
        b = list(c(rnorm(10,0.5)),c(rnorm(10,0.6)), c(rnorm(10,0.7)), c(rnorm(10,0.7))))
#创建一个函数来提取第50个2.5和97.5个百分位数
百分位数%
在(.vars=c('a','b'),.funs=list(ul=percentile(.,0.975))处进行变异
试图执行上述代码,但它给我一个错误


谢谢你

你可以在一个
mutate\u
电话:

library(dplyr)
library(purrr)

x %>% 
  mutate_at(vars(c('a','b')), list(ce = ~percentile(.,0.5),
                                   ll = ~percentile(.,0.025), 
                                   ul = ~percentile(.,0.75)))

# A tibble: 4 x 8
#  a          b           a_ce  b_ce   a_ll   b_ll  a_ul  b_ul
#  <list>     <list>     <dbl> <dbl>  <dbl>  <dbl> <dbl> <dbl>
#1 <dbl [10]> <dbl [10]>  1.21 0.232 -0.232 -0.371  2.02 0.673
#2 <dbl [10]> <dbl [10]>  1.65 0.845  0.935  0.222  3.29 1.58 
#3 <dbl [10]> <dbl [10]>  3.13 0.811  1.76  -0.183  3.60 1.22 
#4 <dbl [10]> <dbl [10]>  3.65 1.08   2.72  -0.574  3.93 1.49 

请注意,在较新版本的
dplyr
中,处的
mutate\u很快将被
所取代

您可以在一个
mutate\u中调用:

library(dplyr)
library(purrr)

x %>% 
  mutate_at(vars(c('a','b')), list(ce = ~percentile(.,0.5),
                                   ll = ~percentile(.,0.025), 
                                   ul = ~percentile(.,0.75)))

# A tibble: 4 x 8
#  a          b           a_ce  b_ce   a_ll   b_ll  a_ul  b_ul
#  <list>     <list>     <dbl> <dbl>  <dbl>  <dbl> <dbl> <dbl>
#1 <dbl [10]> <dbl [10]>  1.21 0.232 -0.232 -0.371  2.02 0.673
#2 <dbl [10]> <dbl [10]>  1.65 0.845  0.935  0.222  3.29 1.58 
#3 <dbl [10]> <dbl [10]>  3.13 0.811  1.76  -0.183  3.60 1.22 
#4 <dbl [10]> <dbl [10]>  3.65 1.08   2.72  -0.574  3.93 1.49 

请注意,在较新版本的
dplyr
中,
处的
mutate\u很快将被
所取代

谢谢-这非常有效。我可以查询百分位数函数的语法吗?y如何对应分位数函数的百分位数?好吧,R中几乎所有的函数都支持
,这是函数的附加参数(请参见
?map_dbl
),所以这样做
map_dbl(x,分位数,y)
map_dbl(x,分位数(.x,y)相同
。感谢ronak-非常有帮助。了解SyntaxThank的第二个版本。这非常有效。我可以查询百分位数函数的语法吗?y如何对应分位数函数的百分位数?嗯,R中的几乎所有函数都支持
,这是函数的附加参数(请参见
?map_dbl
)这样做
map_dbl(x,分位数,y)
map_dbl(x,分位数(.x,y)
相同。感谢ronak-非常有帮助。理解语法的第二个版本
percentile <- function (x,y) map_dbl(x, quantile, y)