如何解决在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 举报,一经查实,本站将立刻删除。