- 此问题在此处已有答案**:
Select last non-NA value in a row, by row(3个答案)
两年前关闭了。
这有点难以解释,但我有一个 Dataframe ,其中的值看起来像一个楼梯-对于每个日期,都有不同的列,其中一些日期的值为NA。我想创建一个新列,其中包含最后一个非NA列的值。
希望这个例子更有意义:
示例 Dataframe :
test <- data.frame("date" = c(as.Date("2020-01-01"), as.Date("2020-01-02"), as.Date("2020-01-03")),
"a" = c(4, 3, 4),
"b" = c(NA, 2, 1),
"c" = c(NA, NA, 5))
预期输出:
date............val
2020-01-01...... 4
2020-01-02...... 2
2020-01-03...... 5
我也不喜欢做一些类似于取日期的行号,然后取列号+1的事情,但是如果这是唯一的方法,那就这样吧。谢谢!
3条答案
按热度按时间rt4zxlrg1#
下面是一个基于Tidyverse的方法--使用
pivot_longer
将列转换为行,然后获取每个日期的值不是NA的最后一行:3zwtqj6y2#
您可以使用
max.col
(将ties.method
设置为"last"
)来获取每行中的最后一个非NA值。pn9klfpd3#
您也可以使用dplyr的
coalesce
函数来实现这一点,该函数从提供的向量中获取第一个非缺失元素。由reprex package(v0.3.0)于2020年7月7日创建
注意,如果你有很多列,@tfehring & @Ronak的解决方案会更适合,因为这种方法你必须手动指定你的列,不过它确实有简洁的好处。