【问题标题】:How to fill NA with values by group and conditioning如何按组和条件用值填充 NA
【发布时间】:2021-11-18 13:55:57
【问题描述】:

我正在努力弄清楚如何在 id2 具有 value = NA 和相同的 date1 时重复 value

我有以下数据框:

test = data.frame(date1 = c("2020-11-02", "2020-11-02","2020-11-02", "2020-11-03","2020-11-04","2020-11-04"),
                  value = c(676, 676, NA, 400, 505, NA),
                  id1 = c("16-4-L", "16-3-L", "16-3-R", "16-3-F", "17-6-L", "17-1-L"),
                  id2 = c("16", "16", "16", "16", "17", "17"))

#        date1 value    id1 id2
# 1 2020-11-02   676 16-4-L  16
# 2 2020-11-02   676 16-3-L  16
# 3 2020-11-02    NA 16-3-R  16
# 4 2020-11-03   400 16-3-F  16
# 5 2020-11-04   505 17-6-L  17
# 6 2020-11-04    NA 17-1-L  17

#and I need the following:
#> result
#        date1 value    id1 id2
# 1 2020-11-02   676 16-4-L  16
# 2 2020-11-02   676 16-3-L  16
# 3 2020-11-02   676 16-3-R  16
# 4 2020-11-03   400 16-3-F  16
# 5 2020-11-04   505 17-6-L  17
# 6 2020-11-04   505 17-1-L  17

请注意,id2 是不同的,但我希望在同一日期使用相同的 id1 以使用相同的值。

我想做类似:if value is an NA, then we look to rows that have the same id2 and date1, then just copy that value.

任何提示我该怎么做?

【问题讨论】:

  • 您的描述令人困惑,因为您指的是id2,但实际上是在id1上做的。
  • 你可以应用这个逻辑:
  • 正是@deschen,我需要将相同的id1date1 的值设置为id2,当它的值是NA 时。
  • @AmandaSB,哪一个?

标签: r dataframe dplyr


【解决方案1】:

你在寻找什么吗?喜欢:

library(tidyverse)
test %>%
  group_by(date1, id2) %>%
  fill(value, .direction = 'updown') %>%
  ungroup()

给出:

# A tibble: 6 x 4
  date1      value id1    id2  
  <chr>      <dbl> <chr>  <chr>
1 2020-11-02   676 16-4-L 16   
2 2020-11-02   676 16-3-L 16   
3 2020-11-02   676 16-3-R 16   
4 2020-11-03   400 16-3-F 16   
5 2020-11-04   505 17-6-L 17   
6 2020-11-04   505 17-1-L 17

【讨论】:

  • 如果我首先有一个 NA,然后是一个值,那么“向上”的方向会影响?
  • 是的,请参阅?fill 的帮助文件。如果这不是您想要的,请随意更改您的需求。
猜你喜欢
  • 2015-02-06
  • 2022-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-18
相关资源
最近更新 更多