gpt4 book ai didi

r - Ifelse 与 R 中的 dplyr

转载 作者:行者123 更新时间:2023-12-02 11:18:53 28 4
gpt4 key购买 nike

我想使用 dplyr 将每个 ID 的 DV 列中的 NA 值替换为该个体内特定时间点的 DV 值:

  • 我想将每个 ID 的时间 2 处的 NA(DV 列)替换为该特定 ID 的时间 4 处的 DV 值。
  • 我想将每个 ID 的时间 4 处的 NA(DV 列)替换为该特定 ID 的时间 0 处的 DV 值。

我不知道如何使用 dplyr 来做到这一点。这是我的数据集:

ID   TIME  DV
1 0 5
1 2 NA
1 4 4
2 0 3
2 2 3
2 4 NA
3 0 7
3 2 NA
3 4 9

预期输出:

ID   TIME  DV
1 0 5
1 2 4
1 4 4
2 0 3
2 2 3
2 4 3
3 0 7
3 2 9
3 4 9

如有任何建议,我们将不胜感激。最好的,

最佳答案

我同意@akrun的观点,也许fill一般来说是一个不错的选择,但你的规则建议以不同的方式处理事情(因为“updown”不遵循你的规则)。

library(dplyr)
# library(tidyr)
dat %>%
tidyr::pivot_wider(id_cols = "ID", names_from = "TIME", values_from = "DV") %>%
mutate(
`2` = if_else(is.na(`2`), `4`, `2`),
`4` = if_else(is.na(`4`), `0`, `4`)
) %>%
tidyr::pivot_longer(-ID, names_to = "TIME", values_to = "DV")
# # A tibble: 9 x 3
# ID TIME DV
# <int> <chr> <int>
# 1 1 0 5
# 2 1 2 4
# 3 1 4 4
# 4 2 0 3
# 5 2 2 3
# 6 2 4 3
# 7 3 0 7
# 8 3 2 9
# 9 3 4 9

通过查看中间管道可能有助于可视化它正在做什么:

dat %>%
tidyr::pivot_wider(id_cols = "ID", names_from = "TIME", values_from = "DV")
# # A tibble: 3 x 4
# ID `0` `2` `4`
# <int> <int> <int> <int>
# 1 1 5 NA 4
# 2 2 3 3 NA
# 3 3 7 NA 9
dat %>%
tidyr::pivot_wider(id_cols = "ID", names_from = "TIME", values_from = "DV") %>%
mutate(
`2` = if_else(is.na(`2`), `4`, `2`),
`4` = if_else(is.na(`4`), `0`, `4`)
)
# # A tibble: 3 x 4
# ID `0` `2` `4`
# <int> <int> <int> <int>
# 1 1 5 4 4
# 2 2 3 3 3
# 3 3 7 9 9

关于r - Ifelse 与 R 中的 dplyr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61736524/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com