如何用另一列填充NA?

时间:2019-09-09 01:28:11

标签: r dataframe

我想在B列的NA列上方填充A列。

示例

           A              B
          20:12:00    40:34:00
          04:34:00        NA
          12:35:00    03:19:00
          12:23:00        NA

输出:对于第一个NA,列A中NA上方的一行是20:12:00,第二个是12:35:00

           A              B
          20:12:00    40:34:00
          04:34:00    20:12:00
          12:35:00    03:19:00
          12:23:00    12:35:00

我试图用它来解决它,但我不能

     for (i in 2:nrow(N1))
    df[i,51] = ifelse(is.na(df[i,51]), df[i-1,50],df[i,51])

其中51是B,而50是A。出现错误,它不起作用

2 个答案:

答案 0 :(得分:1)

一种选择是使用lag

library(dplyr)
df %>%
    mutate_if(is.factor, as.character) %>%
    mutate(B = if_else(is.na(B), lag(A), B))
#         A        B
#1 20:12:00 40:34:00
#2 04:34:00 20:12:00
#3 12:35:00 03:19:00
#4 12:23:00 12:35:00

我不清楚您的列向量的数据类型(为避免此类歧义,最好使用dput共享数据)。在这里,我假设它们是factor,然后将它们转换为chr向量。


或者在基数R中(感谢@Shree)

df$B <- with(df, ifelse(is.na(B), c(NA, A[-nrow(df)]), B)

答案 1 :(得分:0)

我们可以在此处使用coalesce

library(dplyr)
df1 %>%
    mutate(B = coalesce(B, lag(A)))
#      A        B
#1 20:12:00 40:34:00
#2 04:34:00 20:12:00
#3 12:35:00 03:19:00
#4 12:23:00 12:35:00

数据

df1 <- structure(list(A = c("20:12:00", "04:34:00", "12:35:00", "12:23:00"
), B = c("40:34:00", NA, "03:19:00", NA)), class = "data.frame", row.names = c(NA, 
-4L))
相关问题