tdf <- data.frame(
A = c(1, 2, 5, 4),
B = c(NA, 3, 4, 5),
C = c(NA, NA, NA, NA),
D = c(NA, NA, NA, NA),
E = c(10, 20, 30, 40))
我需要用另一列的值替换从左到右的最后一个非NA值,例如E,以给出:
enddf <- data.frame(
A = c(10, 2, 5, 4),
B = c(NA, 20, 30, 40),
C = c(NA, NA, NA, NA),
D = c(NA, NA, NA, NA),
E = c(10, 20, 30, 40))
我正在阅读多个列数的多个dfs,所以我在思考一个读取所有行但最后一个可以读取的函数吗?我尝试了这样的事情,但我觉得我朝着错误的方向:
df <- tdf %>%
rowwise() %>%
mutate(
A = ifelse(is.na(A), A, ifelse(!is.na(B), C, A)),
B = ifelse(!is.na(A) & is.na(B), C, B)
)
a
NA
的方式寻找apply
。
wcol <- ncol(tdf)
data.frame(t(apply(tdf, 1, \(x) {
x[which(is.na(x))[1] - 1] <- x[wcol]
x
})))
输出
A B C D E
1 10 NA NA NA 10
2 2 20 NA NA 20
3 5 30 NA NA 30
4 4 40 NA NA 40
由于中间矩阵结果,这些值都是数字不转换的。