首页 > 解决方案 > 创建包含 quantile() 函数输出的列

问题描述

我正在寻找一种基于quantile()函数输出创建多个列的方法。我实际上想要包含女性和男性值的每行的分位数。

第 1 行的示例:我想要quantile(c(4.6, 5.8)) 哪个给:

  0%  25%  50%  75% 100% 
 4.6  4.9  5.2  5.5  5.8 

这是一个数据样本和我想要的输出:

数据 :

  code  womens  mens
1: 01    4.6    5.8
2: 02    5.0    4.6
3: 03    4.1    5.3
4: 04    5.2    3.0
5: 05    4.6    5.4
6: 06    2.3    3.4

我想要的是 :

  code  womens  mens  0%  25%  50%  75% 100%
1: 01    4.6    5.8  4.6  4.9  5.2  5.5  5.8 
2: 02    5.0    4.6  4.6  4.7  4.8  4.9  5.0   
3: 03    4.1    5.3  4.1  4.4  4.7  5.0  5.3
4: 04    5.2    3.0  3.0  3.5  4.1  4.6  5.2 
5: 05    4.6    5.4  4.6  4.8  5.0  5.2  5.4 
6: 06    2.3    3.4  2.3  2.6  2.8  3.1  3.4

我已经尝试过lapply(),有些for loop没有结果。我得到的结果4.6 4.9 5.2 5.5 5.8对于每一行都是一样的。

感谢大家

标签: r

解决方案


cbind(d, do.call(rbind, lapply(1:NROW(d), function(i){
    quantile(d[i, c("womens", "mens")])
})))
#   code womens mens  0%   25%  50%   75% 100%
#1:    1    4.6  5.8 4.6 4.900 5.20 5.500  5.8
#2:    2    5.0  4.6 4.6 4.700 4.80 4.900  5.0
#3:    3    4.1  5.3 4.1 4.400 4.70 5.000  5.3
#4:    4    5.2  3.0 3.0 3.550 4.10 4.650  5.2
#5:    5    4.6  5.4 4.6 4.800 5.00 5.200  5.4
#6:    6    2.3  3.4 2.3 2.575 2.85 3.125  3.4

数据

d = structure(list(code = 1:6,
                   womens = c(4.6, 5, 4.1, 5.2, 4.6, 2.3),
                   mens = c(5.8, 4.6, 5.3, 3, 5.4, 3.4)),
              class = "data.frame",
              row.names = c("1:", "2:", "3:", "4:", "5:", "6:"))

推荐阅读