用列表替换 tibble 中的 NA 值

Replace NA values in a tibble with a list

我有一个小标题,其中一列的值都是 NA。 我有一个值列表,我想用它来替换 NA 值。 我正在寻找一种整洁的(如果可能的话)方法来用列表中的值替换 NA 值。 我看过一些看起来可能有用的答案,但问题和答案太复杂了,我无法适应。

一两个小时的谷歌搜索都没有为我打开灯。 这是一个简单的例子:

        PersonName <- c("Bob", "John", "Harry")
        Phone <- c(NA,NA,NA)
        t <- tibble(PersonName, Phone)
        numbers <- c("555-1212", "555-1234", "555-7856")

我无法创建必要的代码来生成示例,但我希望能够将每个 Phone 列中的 NA 替换为列表中的数字, 依次

假设'Phone'中NA的个数等于'numbers'length,可以用replace加上逻辑条件

t1 <- t %>%
         mutate(Phone = replace(Phone, is.na(Phone), numbers))
t1
# A tibble: 3 x 2
#  PersonName Phone   
#  <chr>      <chr>   
#1 Bob        555-1212
#2 John       555-1234
#3 Harry      555-7856

更新

根据与 OP 的讨论,我们似乎只需要更新与另一列中的值相对应的列的一部分行

gNodes2 <- gNodes %>% 
              mutate(DataType = replace(DataType, NodeType == "column", numbers))

假设与上面相同 (length(Phone) = length(numbers)) 但 cbind()transmute():

t <- cbind(t, numbers) %>% transmute(PersonName, Phone = numbers) 
t

#  PersonName Phone
#1        Bob 555-1212
#2       John 555-1234
#3      Harry 555-7856