将一行的最后一个非NA条件与另一列的值重新定位

问题描述 投票:0回答:1
我有一个类似的数据集:

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
r function replace na
1个回答
0
投票
方法,以

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

由于中间矩阵结果,这些值都是数字不转换的。


最新问题
© www.soinside.com 2019 - 2025. All rights reserved.