r - R - 是否有一种简洁的方法可以为长数据帧中的每个组获取折刀平均值
问题描述
使用 mtcars 数据集,我现在有一个函数可以为 mpg 创建一个折刀平均值。
data(mtcars)
for (i in 1:nrow(mtcars)) {
mtcars_minus_one <- mtcars[-i,]
mean_value_minus_one = mean(mtcars_minus_one$mpg)
mtcars$jackknife_mean_mpg[i] <- mean_value_minus_one
}
ggplot(mtcars, aes(x = jackknife_mean_mpg)) +
geom_histogram(bins = 32, color = 'black', fill = 'lightblue')
我也有一个很长的数据框。
mtcars <- as_tibble(mtcars, rownames = 'car')
mtcars_numeric <- mtcars %>%
dplyr::select(car, mpg, disp, hp, drat, wt, qsec)
mtcars_long_numeric <- pivot_longer(mtcars_numeric, names_to = 'names', values_to = 'values', 2:7)
有没有一种简洁的方法可以为每个组创建一个折刀列?我只知道如何使用这个函数来做这个折刀——我想知道是否有一种 dplyr 方法可以做到这一点而不必运行该函数六次。
解决方案
我们可以循环across
感兴趣的列,即'mpg','disp','hp',然后循环遍历行序列map
,删除对应于该序列索引(x[-rn]
)的观察,获取mean
并返回它,创建新列利用.names
library(dplyr)
library(purrr)
mtcars_numeric %>%
mutate(across(c(mpg, disp, hp), function(x)
map_dbl(seq_along(x), function(rn) mean(x[-rn])),
.names = "{.col}_mean"))
-输出
carb mpg disp hp drat wt qsec mpg_mean disp_mean hp_mean
1 4 21.0 160.0 110 3.90 2.620 16.46 20.06129 233.0032 147.8710
2 4 21.0 160.0 110 3.90 2.875 17.02 20.06129 233.0032 147.8710
3 1 22.8 108.0 93 3.85 2.320 18.61 20.00323 234.6806 148.4194
4 1 21.4 258.0 110 3.08 3.215 19.44 20.04839 229.8419 147.8710
5 2 18.7 360.0 175 3.15 3.440 17.02 20.13548 226.5516 145.7742
6 1 18.1 225.0 105 2.76 3.460 20.22 20.15484 230.9065 148.0323
7 4 14.3 360.0 245 3.21 3.570 15.84 20.27742 226.5516 143.5161
8 2 24.4 146.7 62 3.69 3.190 20.00 19.95161 233.4323 149.4194
9 2 22.8 140.8 95 3.92 3.150 22.90 20.00323 233.6226 148.3548
10 4 19.2 167.6 123 3.92 3.440 18.30 20.11935 232.7581 147.4516
11 4 17.8 167.6 123 3.92 3.440 18.90 20.16452 232.7581 147.4516
12 3 16.4 275.8 180 3.07 4.070 17.40 20.20968 229.2677 145.6129
13 3 17.3 275.8 180 3.07 3.730 17.60 20.18065 229.2677 145.6129
14 3 15.2 275.8 180 3.07 3.780 18.00 20.24839 229.2677 145.6129
15 4 10.4 472.0 205 2.93 5.250 17.98 20.40323 222.9387 144.8065
16 4 10.4 460.0 215 3.00 5.424 17.82 20.40323 223.3258 144.4839
17 4 14.7 440.0 230 3.23 5.345 17.42 20.26452 223.9710 144.0000
18 1 32.4 78.7 66 4.08 2.200 19.47 19.69355 235.6258 149.2903
19 2 30.4 75.7 52 4.93 1.615 18.52 19.75806 235.7226 149.7419
20 1 33.9 71.1 65 4.22 1.835 19.90 19.64516 235.8710 149.3226
21 1 21.5 120.1 97 3.70 2.465 20.01 20.04516 234.2903 148.2903
22 2 15.5 318.0 150 2.76 3.520 16.87 20.23871 227.9065 146.5806
23 2 15.2 304.0 150 3.15 3.435 17.30 20.24839 228.3581 146.5806
24 4 13.3 350.0 245 3.73 3.840 15.41 20.30968 226.8742 143.5161
25 2 19.2 400.0 175 3.08 3.845 17.05 20.11935 225.2613 145.7742
26 1 27.3 79.0 66 4.08 1.935 18.90 19.85806 235.6161 149.2903
27 2 26.0 120.3 91 4.43 2.140 16.70 19.90000 234.2839 148.4839
28 2 30.4 95.1 113 3.77 1.513 16.90 19.75806 235.0968 147.7742
29 4 15.8 351.0 264 4.22 3.170 14.50 20.22903 226.8419 142.9032
30 6 19.7 145.0 175 3.62 2.770 15.50 20.10323 233.4871 145.7742
31 8 15.0 301.0 335 3.54 3.570 14.60 20.25484 228.4548 140.6129
32 2 21.4 121.0 109 4.11 2.780 18.60 20.04839 234.2613 147.9032
推荐阅读
- image - 在 Rmarkdown 中添加内联 .svg 图像
- python - 在 Windows 上从 GUI 启动两个无限 Python 脚本
- c# - 有没有办法在不重新加载整个页面的情况下自动更新 Void 和 PlaceHolder?
- html - 子菜单中的子菜单上未拾取 CSS 悬停事件
- xml - 基于 ID 属性的 XSL 匹配节点
- apache-spark - 从嵌套数组和结构火花中提取值
- r - 将逻辑 (0) 作为输出
- python - 数据框的最佳组织结构
- java - 尝试将 jar 中的文件复制到磁盘时,为什么会出现“nullfiles”?
- python - 如何在 kivy 中修复“无效的属性名称”