给定此数据集:
df <- data.frame(a = c(NA, NA, NA, NA, 10, 10, 16, 21),
b = c(NA, NA, NA, NA, NA, NA, 2, 4))
计算上一行值之间的差异:
df <- df%>%
mutate(a_diff = a - lag(a, default = first(a)),
b_diff = b - lag(b, default = first(b)))
但我需要的结果如下:
也就是说,我需要将“a_diff”列的最后一个“NA”值替换为与“a”列的行号对应的值。 'b_diff' 列也是如此。
提前感谢您阅读我的问题,如果您能为我提供解决问题的任何线索,我将不胜感激。
最佳答案
也许这就是您正在寻找的。将 max(which(is.na()))
与“diff”值一起使用将获得该列中最后一个 NA
的位置。您可以替换为该特定行的值,如下所示。
library(tidyverse)
df %>%
mutate(a_diff = a - lag(a, default = first(a)),
b_diff = b - lag(b, default = first(b))) %>%
mutate(a_diff = ifelse(row_number() == max(which(is.na(a_diff))), a, a_diff),
b_diff = ifelse(row_number() == max(which(is.na(b_diff))), b, b_diff))
输出
a b a_diff b_diff
1 NA NA NA NA
2 NA NA NA NA
3 NA NA NA NA
4 NA NA NA NA
5 10 NA 10 NA
6 10 NA 0 NA
7 16 2 6 2
8 21 4 5 2
关于R - 替换有NA值的特定位置的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71721056/