在 lapply 函数中添加带有名称的列(R 软件)
add column with names in lapply function (R software)
我正在使用 lapply 函数来估计数据帧列表中几列的分位数:
stack(lapply(df[3:6], quantile, prob = c(0.25,0.50,0.75), **names = c("q0.25, q0.50, q0.75")**))
它的工作方式与我预期的一样,名称的最后一部分较少,我如何在输出 table 中创建一个列来说明每一行是什么:q0.25、q0.50、q。 075
您可以使用 sapply
,它将 return 具有适当名称的矩阵:
t(sapply(df[3:6], quantile, prob = c(0.25,0.50,0.75)))
如果你想要特定的名称,你可以将数据转换为数据框并使用setNames
。
setNames(data.frame(t(sapply(df[3:6], quantile, prob = c(0.25,0.50,0.75)))),
c("q0.25", "q0.50", "q0.75"))
例如,使用mtcars
数据集-
setNames(data.frame(t(sapply(mtcars[3:6], quantile, prob = c(0.25,0.50,0.75)))),
c("q0.25", "q0.50", "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
的解决方案 [我使用 mtcars 作为示例 df <- mtcars
]
purrr::map_dfr(df[3:6], quantile, prob = c(0.25,0.50,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
或者在 long-format 输出中:
library(purrr)
map(mtcars[3:6], quantile, prob = c(0.25,0.50,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
,因此您也可以使用 dplyr
。
library(dplyr) # version >= 1.0.0
df[3:6] %>%
summarise(across(everything(), quantile, prob = c(0.25,0.50,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
我正在使用 lapply 函数来估计数据帧列表中几列的分位数:
stack(lapply(df[3:6], quantile, prob = c(0.25,0.50,0.75), **names = c("q0.25, q0.50, q0.75")**))
它的工作方式与我预期的一样,名称的最后一部分较少,我如何在输出 table 中创建一个列来说明每一行是什么:q0.25、q0.50、q。 075
您可以使用 sapply
,它将 return 具有适当名称的矩阵:
t(sapply(df[3:6], quantile, prob = c(0.25,0.50,0.75)))
如果你想要特定的名称,你可以将数据转换为数据框并使用setNames
。
setNames(data.frame(t(sapply(df[3:6], quantile, prob = c(0.25,0.50,0.75)))),
c("q0.25", "q0.50", "q0.75"))
例如,使用mtcars
数据集-
setNames(data.frame(t(sapply(mtcars[3:6], quantile, prob = c(0.25,0.50,0.75)))),
c("q0.25", "q0.50", "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
的解决方案 [我使用 mtcars 作为示例 df <- mtcars
]
purrr::map_dfr(df[3:6], quantile, prob = c(0.25,0.50,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
或者在 long-format 输出中:
library(purrr)
map(mtcars[3:6], quantile, prob = c(0.25,0.50,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
,因此您也可以使用 dplyr
。
library(dplyr) # version >= 1.0.0
df[3:6] %>%
summarise(across(everything(), quantile, prob = c(0.25,0.50,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