r - 使用 dplyr 修改另一个向量中分组变量的最后一个元素的值
问题描述
我想修改以下数据框,以便全部x
为:ping == 3
NA
数据
d <- tibble(id = rep(c(1001, 1002), each = 6),
day = rep(c(1, 1, 1, 2, 2, 2), 2),
ping = rep(1:3, 4),
x = rnorm(12, 5, 4),
y = x*0.3 + rnorm(12))
# A tibble: 12 x 5
id day ping x y
<dbl> <dbl> <int> <dbl> <dbl>
1 1001 1 1 5.63 0.783
2 1001 1 2 7.02 3.41
3 1001 1 3 1.72 1.29
4 1001 2 1 -3.00 0.154
5 1001 2 2 3.08 -0.485
6 1001 2 3 5.34 2.60
7 1002 1 1 1.42 -1.27
8 1002 1 2 1.31 -0.139
9 1002 1 3 6.32 0.524
10 1002 2 1 4.43 -0.878
11 1002 2 2 6.74 3.84
12 1002 2 3 4.79 0.782
期望的输出
# A tibble: 12 x 5
id day ping x y
<dbl> <dbl> <int> <dbl> <dbl>
1 1001 1 1 5.63 0.783
2 1001 1 2 7.02 3.41
3 1001 1 3 NA 1.29
4 1001 2 1 -3.00 0.154
5 1001 2 2 3.08 -0.485
6 1001 2 3 NA 2.60
7 1002 1 1 1.42 -1.27
8 1002 1 2 1.31 -0.139
9 1002 1 3 NA 0.524
10 1002 2 1 4.43 -0.878
11 1002 2 2 6.74 3.84
12 1002 2 3 NA 0.782
我该怎么做dplyr
?
d %>%
group_by(day) %>%
mutate(...)
解决方案
您可以在不分组的情况下执行此操作。我认为根据您的新要求,这可能会有所帮助:
library(dplyr)
d %>%
group_by(id, day) %>%
arrange(ping) %>%
mutate(x = ifelse(row_number() == n(), NA, x)) %>%
ungroup() %>%
arrange(id, day)
# A tibble: 12 x 5
id day ping x y
<dbl> <dbl> <int> <dbl> <dbl>
1 1001 1 1 5.19 2.54
2 1001 1 2 0.582 1.06
3 1001 1 3 NA 2.63
4 1001 2 1 7.32 3.16
5 1001 2 2 2.37 -0.104
6 1001 2 3 NA 3.65
7 1002 1 1 0.249 -0.0869
8 1002 1 2 5.61 3.62
9 1002 1 3 NA 1.92
10 1002 2 1 11.5 3.79
11 1002 2 2 5.14 1.85
12 1002 2 3 NA 2.68
推荐阅读
- python - 创建面板数据框
- reactjs - 在获取数据时得到错误的输出?
- android - 需要帮助实现协程,需要等待api响应
- java - RecyclerView 中的横幅 AdMob
- kubernetes - 启用防火墙时无法访问 k8s-dashboard
- node.js - 不知道如何使用 dockerized clamAV 开始使用 nodejs
- rasa-nlu - 了解 RASA 表格
- xamarin - Xamarin.Forms 项目中的 Nuget 包已安装,但缺少参考
- nginx - Dynamix Nginx 代理传递,带有来自位置路径的变量
- python - 如何在按钮区域断开线路?