r - 条件 mutate_at 和 lag
问题描述
基于这个问题的扩展,我有一个整洁的小标题,里面有几个“嵌套组”,其中一些NA
在最后一行包含 a 。
# A tibble: 16 x 9
# Groups: VP, Con, Dir [2]
VP Con Dir Seg time_seg mean_v_seg sd_v_seg mean_abs_v_seg sd_abs_v_seg
<int> <int> <int> <int> <int> <dbl> <dbl> <dbl> <dbl>
1 10 2 1 1 1810 233. 142. 233. 142.
2 10 2 1 2 260 105. 77.0 105. 77.0
3 10 2 1 3 540 158. 98.0 158. 98.0
4 10 2 1 4 1470 219. 125. 219. 125.
5 10 2 1 5 460 359. 233. 359. 233.
6 10 2 1 6 690 281. 149. 281. 149.
7 10 2 1 7 760 599. 281. 599. 281.
8 10 2 1 8 NA NA NA NA NA
9 10 2 2 1 320 88.0 103. 88.0 103.
10 10 2 2 2 1110 183. 75.3 183. 75.3
11 10 2 2 3 450 40.6 44.4 40.6 44.4
12 10 2 2 4 600 67.8 53.7 67.8 53.7
13 10 2 2 5 1680 178. 107. 178. 107.
14 10 2 2 6 730 227. 99.2 227. 99.2
15 10 2 2 7 850 224. 192. 224. 192.
16 10 2 2 8 840 463. 243. 463. 243.
我现在注意到,对于这些组,NA 实际上应该在第一行而不是最后一行。因此,我正在考虑使用就地替换(我不想要新列)将行lag
之间time_seg
和sd_abs_v_seg
行中的列中的数据进一步向下移动。
因此,所需的输出将是
# A tibble: 16 x 9
# Groups: VP, Con, Dir [2]
VP Con Dir Seg time_seg mean_v_seg sd_v_seg mean_abs_v_seg sd_abs_v_seg
<int> <int> <int> <int> <int> <dbl> <dbl> <dbl> <dbl>
1 10 2 1 1 NA NA NA NA NA
2 10 2 1 2 1810 233. 142. 233. 142.
3 10 2 1 3 260 105. 77.0 105. 77.0
4 10 2 1 4 540 158. 98.0 158. 98.0
5 10 2 1 5 1470 219. 125. 219. 125.
6 10 2 1 6 460 359. 233. 359. 233.
7 10 2 1 7 690 281. 149. 281. 149.
8 10 2 1 8 760 599. 281. 599. 281.
9 10 2 2 1 320 88.0 103. 88.0 103.
10 10 2 2 2 1110 183. 75.3 183. 75.3
11 10 2 2 3 450 40.6 44.4 40.6 44.4
12 10 2 2 4 600 67.8 53.7 67.8 53.7
13 10 2 2 5 1680 178. 107. 178. 107.
14 10 2 2 6 730 227. 99.2 227. 99.2
15 10 2 2 7 850 224. 192. 224. 192.
16 10 2 2 8 840 463. 243. 463. 243.
但是,我正在考虑mutate
与参数一起使用ifelse
,然后我必须指定要进行替换的每一列。因此,我正在考虑将mutate_at
-vars()
与一起使用ifelse
(应该检查该组是否完整)。像这样的事情很接近,但是,它也会生成新的列(我不想要)。有没有dplyr
可以解决这个问题的功能?
下面是dput
重现。
structure(list(VP = c(10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L,
10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L), Con = c(2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), Dir = c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L),
Seg = c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 1L, 2L, 3L, 4L, 5L,
6L, 7L, 8L), time_seg = c(1810L, 260L, 540L, 1470L, 460L,
690L, 760L, NA, 320L, 1110L, 450L, 600L, 1680L, 730L, 850L,
840L), mean_v_seg = c(232.726734030707, 104.655087869347,
157.902075043105, 219.283376258725, 359.45973673094, 280.549706434598,
599.424071456088, NA, 87.9826401741796, 182.735676197134,
40.6448541145307, 67.7977476910328, 177.773637255357, 227.483717669439,
224.429379556985, 462.826739492667), sd_v_seg = c(141.879040585992,
77.0389438694476, 97.9539089123486, 125.076162880904, 233.204343193672,
149.049291752719, 280.885009497318, NA, 102.904347085381,
75.3257592307251, 44.4481451785732, 53.7088336445736, 106.75027532838,
99.2415032284702, 192.206130493083, 243.219568282535), mean_abs_v_seg = c(232.726734030707,
104.655087869347, 157.902075043105, 219.283376258725, 359.45973673094,
280.549706434598, 599.424071456088, NA, 87.9826401741796,
182.735676197134, 40.6448541145307, 67.7977476910328, 177.773637255357,
227.483717669439, 224.429379556985, 462.826739492667), sd_abs_v_seg = c(141.879040585992,
77.0389438694476, 97.9539089123486, 125.076162880904, 233.204343193672,
149.049291752719, 280.885009497318, NA, 102.904347085381,
75.3257592307251, 44.4481451785732, 53.7088336445736, 106.75027532838,
99.2415032284702, 192.206130493083, 243.219568282535)), row.names = c(NA,
-16L), class = c("grouped_df", "tbl_df", "tbl", "data.frame"), vars = c("VP",
"Con", "Dir"), drop = TRUE, indices = list(0:7, 8:15), group_sizes = c(8L,
8L), biggest_group_size = 8L, labels = structure(list(VP = c(10L,
10L), Con = c(2L, 2L), Dir = 1:2), row.names = c(NA, -2L), class = "data.frame", vars = c("VP",
"Con", "Dir"), drop = TRUE))
根据
解决方案
我实际上自己找到了解决方案。
data %>%
mutate_at(vars(time_seg:sd_abs_v_seg), funs(if(anyNA(.))
lag(., 1)
else
.))
推荐阅读
- javascript - Eslint 或 prettier 在 vscode 的行尾添加 2 个分号
- c++ - 如何从现有的基类对象创建派生类对象?
- c++ - 使用相同的流对象写入文件流或字符串流
- java - 文件循环 -> 流循环 -> 添加到现有集合
- android - Android Q - 如何获取外部 SD 卡公共下载目录路径
- android - Android Retrofit - 工作 URL 上的 404 错误
- python - 光束偏转和 p
- c++ - 具有多列(数量可变)的 C++ Ifstream 错误
- android - Google Vision 人脸检测需要很长时间
- c# - 如何在 C# RESTful 服务中打开要读取的文件?