将数据框分成 5 个部分并为每个部分使用 describe 函数

Split dataframe into 5 parts and use describe function for every part

我有这样一个数据框:

df <- data.frame(x = 1:100, y = runif(100))

我把它分成了 5 个部分:

z <- split(df, rep(1:5, length.out = nrow(df), each = ceiling(nrow(df)/5)))

现在我正在尝试为 z 中的每个部分查找描述性统计信息,但出现此错误:(我实际上有兴趣在这些中查找 df$y 列的描述性统计信息5 份。)

psych::describe(z,na.rm = TRUE)

Error in var(if (is.vector(x) || is.factor(x)) x else as.double(x), na.rm = na.rm) : 
  is.atomic(x) is not TRUE
Ek olarak: Warning message:
In mean.default(x, na.rm = na.rm) :
  argument is not numeric or logical: returning NA

我正在尝试找到类似这样的内容:(可能看起来不像 z[1]$y,但假设这就是我正在尝试查找的内容)

           vars     n   mean     sd median trimmed    mad   min    max  range skew kurtosis   se
z[1]$y       5 44813   0.02   0.17   0.00    0.01   0.10 -0.97   8.87   9.84 6.19   211.87 0.00
....
z[5]$y       6 45220   0.15   0.07   0.14    0.15   0.05  0.05   0.81   0.76 3.83    31.53 0.00

此外,我如何才能仅对 z[1]z[5] 中的 y 值使用 describe 函数?

我不确定如何处理此处的列表,因此感谢并感谢您的回复。

我认为您可以使用以下解决方案。我不熟悉您正在使用的 describe 函数,但是如果它以向量作为第一个参数,您可以使用包 purrrimap 函数来指定您只想应用您的函数在第 1 个和第 5 个元素上。 imap 中的 .y 参数指的是 positions/names 因为 .x 指的是值:

library(dplyr)
library(purrr)

imap(z, ~ if(.y %in% c(1, 5)) {
  describe(.x[["y"]])
} else {
  .x
})

这是我亲爱的朋友@akrun 建议的另一个更紧凑的基础 R 解决方案:

z[c("1", "5")] <- lapply(z[c("1", "5")], describe)

我们可以使用lapply

library(psych)

n <- 20
nr <- nrow(df)
z <- split(df, rep(1:ceiling(nr/n), each=n, length.out=nr))

lapply(z, psych::describe)

输出:

$`1`
  vars  n  mean   sd median trimmed  mad min   max range skew kurtosis   se
x    1 20 10.50 5.92   10.5   10.50 7.41   1 20.00 19.00 0.00    -1.38 1.32
y    2 20  0.37 0.30    0.3    0.34 0.32   0  0.96  0.96 0.47    -1.13 0.07

$`2`
  vars  n  mean   sd median trimmed  mad   min   max range skew kurtosis   se
x    1 20 30.50 5.92  30.50   30.50 7.41 21.00 40.00 19.00 0.00    -1.38 1.32
y    2 20  0.43 0.29   0.39    0.42 0.34  0.01  0.96  0.95 0.41    -1.14 0.06

$`3`
  vars  n  mean   sd median trimmed  mad   min   max range  skew kurtosis   se
x    1 20 50.50 5.92  50.50   50.50 7.41 41.00 60.00 19.00  0.00    -1.38 1.32
y    2 20  0.55 0.34   0.51    0.56 0.49  0.03  0.98  0.95 -0.08    -1.62 0.08

$`4`
  vars  n  mean   sd median trimmed  mad   min   max range skew kurtosis   se
x    1 20 70.50 5.92  70.50   70.50 7.41 61.00 80.00 19.00 0.00    -1.38 1.32
y    2 20  0.52 0.27   0.46    0.52 0.39  0.15  0.94  0.79 0.12    -1.59 0.06

$`5`
  vars  n  mean   sd median trimmed  mad   min    max range  skew kurtosis   se
x    1 20 90.50 5.92  90.50   90.50 7.41 81.00 100.00 19.00  0.00    -1.38 1.32
y    2 20  0.62 0.33   0.65    0.65 0.43  0.01   0.99  0.98 -0.33    -1.48 0.07