我想在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。出现错误,它不起作用
答案 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))