R 如何用另一列填写列中的NA?

R 如何用另一列填写列中的NA?,r,dataframe,R,Dataframe,我想用A列上方的一行填充B列的NA列 范例 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

我想用A列上方的一行填充B列的NA列

范例

           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。我得到了错误,它不工作

一个选项是使用
滞后

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
共享数据)。这里我假设它们是
因子
s,然后将其转换为
chr
向量


或者在R底(谢谢@Shree)


df$B我们可以在这里使用
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您能描述一下它是如何工作的吗?我的意思是它如何在NA上方一行?@hghg
dplyr::lag(x)
返回位于
I
位置的条目
I-1
。请看一下dplyr::lag(1:3)
的输出。错误:错误:
false
必须是字符向量,而不是
hms/difftime
objectI我用我正在尝试的东西编辑了我的帖子,你能检查一下吗also@Shree是的,这就是为什么我要求OP以明确的格式提供样本数据。你能发布错误消息以便我们能帮助你吗?我会给你我的put数据,结构(list(dep=structure)(c(432008460010740435004470058500107405940010740),class=c(“hms”,“difftime”),units=“secs”),start=c(“11:00:00”,“12:00”,NA,“07:30:00”,“12:05:00”、“12:25:00”、“16:15:00”、“07:05:00”、“16:30:00”)),class=“data.frame”,row.names=c(NA,-9L))start=B,dep=A
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))