R 如何用另一列填写列中的NA?
我想用A列上方的一行填充B列的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
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上方一行?@hghgdplyr::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))