我通常使用以下模式,其中我使用列表列在
有没有更干净/更惯用的方法可以一步完成此操作,而无需每次都转置数据?
tibble
中存储数据,使用 purrr::map
对数据应用函数,然后使用 pivot_longer
转换为整洁格式(长格式)。有没有更干净/更惯用的方法可以一步完成此操作,而无需每次都转置数据?
library(tidyverse)
df <- tibble(n = 5:10)
df$data <- map(df$n, ~rnorm(.x))
df$mean <- map_dbl(df$data, ~mean(.x))
df$median <- map_dbl(df$data, ~median(.x))
# A tibble: 6 x 4
n data mean median
<int> <list> <dbl> <dbl>
1 5 <dbl [5]> -0.0239 -0.324
2 6 <dbl [6]> -0.396 0.0153
3 7 <dbl [7]> 0.506 0.711
4 8 <dbl [8]> 0.463 0.537
5 9 <dbl [9]> -0.248 -0.555
6 10 <dbl [10]> -0.153 -0.293
df <- pivot_longer(df, mean:median)
# A tibble: 12 x 4
n data name value
<int> <list> <chr> <dbl>
1 5 <dbl [5]> mean -0.386
2 5 <dbl [5]> median -0.407
3 6 <dbl [6]> mean -0.190
4 6 <dbl [6]> median -0.451
5 7 <dbl [7]> mean -0.456
6 7 <dbl [7]> median -0.0801
7 8 <dbl [8]> mean -0.0408
8 8 <dbl [8]> median 0.0577
9 9 <dbl [9]> mean 0.273
10 9 <dbl [9]> median 0.410
11 10 <dbl [10]> mean -0.720
12 10 <dbl [10]> median -1.01
value = {tmp <- unlist(data);c(median(tmp), mean(tmp))}
? - maxdata
是一个列表,mean
和median
适用于向量值。比较mean(list(1:5))
和mean(unlist(list(1:5)))
的输出结果。为了避免两次unlist
,我将其存储在临时变量tmp
中,并在median
和mean
中使用它。 - Ronak Shah