微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在lapply函数中添加带有名称的列R软件

如何解决在lapply函数中添加带有名称的列R软件

我正在使用lapply函数来估计数据帧列表中几列的分位数:

stack(lapply(df[3:6],quantile,prob = c(0.25,0.50,0.75),**names = c("q0.25,q0.50,q0.75")**))

它的工作原理比我期望的少了最后一部分,如何在输出表中创建一列来说明每行的含义:q0.25,q0.50,q.075

解决方法

您可以使用sapply来返回具有适当名称的矩阵:

t(sapply(df[3:6],quantile,prob = c(0.25,0.50,0.75)))

如果需要特定名称,可以将数据转换为数据框并使用setNames

setNames(data.frame(t(sapply(df[3:6],0.75)))),c("q0.25","q0.50","q0.75"))

例如,使用mtcars数据集-

setNames(data.frame(t(sapply(mtcars[3:6],"q0.75"))

#         q0.25   q0.50  q0.75
#disp 120.82500 196.300 326.00
#hp    96.50000 123.000 180.00
#drat   3.08000   3.695   3.92
#wt     2.58125   3.325   3.61
,

在一行中有purrr的解决方案[为了示例df <- mtcars我使用mtcars

purrr::map_dfr(df[3:6],0.75),.id = "names")
# A tibble: 4 x 4
  names  `25%`  `50%`  `75%`
  <chr>  <dbl>  <dbl>  <dbl>
1 disp  121.   196.   326   
2 hp     96.5  123    180   
3 drat    3.08   3.70   3.92
4 wt      2.58   3.32   3.61

或以长格式输出:

library(purrr)
map(mtcars[3:6],0.75)) %>% 
  map_dfr(tibble::as_tibble,rownames = "quantiles",.id = "names")
# A tibble: 12 x 3
   names quantiles  value
   <chr> <chr>      <dbl>
 1 disp  25%       121.  
 2 disp  50%       196.  
 3 disp  75%       326   
 4 hp    25%        96.5 
 5 hp    50%       123   
 6 hp    75%       180   
 7 drat  25%         3.08
 8 drat  50%         3.70
 9 drat  75%         3.92
10 wt    25%         2.58
11 wt    50%         3.32
12 wt    75%         3.61

由于您的输入是data.frame,因此您的输出也是,因此也可以使用dplyr

library(dplyr) # version >= 1.0.0
df[3:6] %>%
    summarise(across(everything(),0.75)),quantiles = paste0("q",c("0.25","0.50","0.75")))
     disp    hp  drat      wt quantiles
1 120.825  96.5 3.080 2.58125     q0.25
2 196.300 123.0 3.695 3.32500     q0.50
3 326.000 180.0 3.920 3.61000     q0.75

如果需要,可以通过在末尾添加长格式来重新排列:

 %>% tidyr::pivot_longer(-quantiles)
# A tibble: 12 x 3
   quantiles name   value
   <chr>     <chr>  <dbl>
 1 q0.25     disp  121.  
 2 q0.25     hp     96.5 
 3 q0.25     drat    3.08
 4 q0.25     wt      2.58
 5 q0.50     disp  196.  
 6 q0.50     hp    123   
 7 q0.50     drat    3.70
 8 q0.50     wt      3.32
 9 q0.75     disp  326   
10 q0.75     hp    180   
11 q0.75     drat    3.92
12 q0.75     wt      3.61

要进行整理,您可以随时使用dplyr::arrange

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。