R - 替换有NA值的特定位置的值

标签 r missing-data

给定此数据集:

df <- data.frame(a = c(NA, NA, NA, NA, 10, 10, 16, 21),
                 b = c(NA, NA, NA, NA, NA, NA, 2, 4))
<表类=“s-表”> <标题> 一个 b <正文> 不适用 不适用 不适用 不适用 不适用 不适用 不适用 不适用 10 不适用 10 不适用 16 2 21 4

计算上一行值之间的差异:

df <- df%>%
  mutate(a_diff = a - lag(a, default = first(a)),
         b_diff = b - lag(b, default = first(b)))
<表类=“s-表”> <标题> 一个 b a_diff b_diff <正文> 不适用 不适用 不适用 不适用 不适用 不适用 不适用 不适用 不适用 不适用 不适用 不适用 不适用 不适用 不适用 不适用 10 不适用 不适用 不适用 10 不适用 0 不适用 16 2 6 不适用 21 4 5 2

但我需要的结果如下:

<表类=“s-表”> <标题> 一个 b a_diff b_diff <正文> 不适用 不适用 不适用 不适用 不适用 不适用 不适用 不适用 不适用 不适用 不适用 不适用 不适用 不适用 不适用 不适用 10 不适用 10 不适用 10 不适用 0 不适用 16 2 6 2 21 4 5 2

也就是说,我需要将“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/

相关文章:

R:auto.arima() 与 xreg 与 lm()

r - 如何在控制台窗口中离开 R browser() 模式?

r - 在 R 中,如何用列均值替换缺失值?

python - 如果缺少连续值,则添加 nan

r - 使用来自库 mouse() 的估算数据集来拟合 R 中的多级模型

dataframe - 在 Julia 中转换 DataFrame 时如何跳过缺失值

r - 从 data.frame 中自动提取 p 值

r - 如何使用ggplot2将 Axis 标签保留在一侧, Axis 标题保留在另一侧

r - 有没有技巧可以将列表保存到 R data.table 中的单元格中?

java - Weka:如何在 J48 决策树中实现代理分割?