用字段的上一个和下一个可用值的平均值替换数据框中的 NA 值
Substitute Average of Previous and Next Available Values of Field for NA Values in Dataframe
可用的更大数据集的示例数据集格式如下:
Station <-c("A","A","A","A","A","A","A","A","A","A","A","A","A","A","A")
Parameter <-c(2,3,NA,4,4,9,NA,NA,10,15,NA,NA,NA,18,20)
Par_Count <-c(1,1,1,2,2,1,2,2,1,1,3,3,3,1,1)
df<-data.frame(Station, Parameter, Par_Count)
df
Station Parameter Par_Count
A 2 1
A 3 1
A NA 1
A 4 2
A 4 2
A 9 1
A NA 2
A NA 2
A 10 1
A 15 1
A NA 3
A NA 3
A NA 3
A 18 1
A 20 1
我想用该列中 NA 的下一个和上一个可用值的平均值来估算数量小于 2 的 NA。在原始数据集中,某处 NA 的数量为 100,因此我想忽略数量大于 3 的连续 NA。 Par_Count 表示该特定值在参数中连续出现的次数。
我试过:
library(zoo)
df1 <- within(df, na.approx(df$Parameter, maxgap = 2))
甚至对于单次出现:
df1 <- within(df, Parameter[Parameter == is.na(df$Parameter) & Par_Count == 1] <-
lead(Parameter) - lag(Parameter))
但没有任何效果。它没有改变任何 NA 值的出现。
所需的输出如下:
Station Parameter Par_Count
A 2 1
A 3 1
A 3.5 1
A 4 2
A 4 2
A 9 1
A 9.5 2
A 9.75 2 <--here 9.5 will also work
A 10 1
A 15 1
A NA 3
A NA 3
A NA 3
A 18 1
A 20 1
你快到了。我认为您误解了 within
的用法。如果您想使用 within,您需要将 na.approx 的输出分配给数据框的一列。以下将起作用:
library(zoo)
df1 <- within(df, Parameter <- na.approx(Parameter, maxgap = 2, na.rm = FALSE))
请注意,建议使用 na.rm = FALSE,否则前导或尾随 NA 将被删除,从而导致错误。
就我个人而言,我认为以下内容更具可读性,尽管这是风格问题。
library(zoo)
df1 <- df
df1$Parameter <- na.approx(df$Parameter, maxgap = 2, na.rm = FALSE))
可用的更大数据集的示例数据集格式如下:
Station <-c("A","A","A","A","A","A","A","A","A","A","A","A","A","A","A")
Parameter <-c(2,3,NA,4,4,9,NA,NA,10,15,NA,NA,NA,18,20)
Par_Count <-c(1,1,1,2,2,1,2,2,1,1,3,3,3,1,1)
df<-data.frame(Station, Parameter, Par_Count)
df
Station Parameter Par_Count
A 2 1
A 3 1
A NA 1
A 4 2
A 4 2
A 9 1
A NA 2
A NA 2
A 10 1
A 15 1
A NA 3
A NA 3
A NA 3
A 18 1
A 20 1
我想用该列中 NA 的下一个和上一个可用值的平均值来估算数量小于 2 的 NA。在原始数据集中,某处 NA 的数量为 100,因此我想忽略数量大于 3 的连续 NA。 Par_Count 表示该特定值在参数中连续出现的次数。
我试过:
library(zoo)
df1 <- within(df, na.approx(df$Parameter, maxgap = 2))
甚至对于单次出现:
df1 <- within(df, Parameter[Parameter == is.na(df$Parameter) & Par_Count == 1] <-
lead(Parameter) - lag(Parameter))
但没有任何效果。它没有改变任何 NA 值的出现。
所需的输出如下:
Station Parameter Par_Count
A 2 1
A 3 1
A 3.5 1
A 4 2
A 4 2
A 9 1
A 9.5 2
A 9.75 2 <--here 9.5 will also work
A 10 1
A 15 1
A NA 3
A NA 3
A NA 3
A 18 1
A 20 1
你快到了。我认为您误解了 within
的用法。如果您想使用 within,您需要将 na.approx 的输出分配给数据框的一列。以下将起作用:
library(zoo)
df1 <- within(df, Parameter <- na.approx(Parameter, maxgap = 2, na.rm = FALSE))
请注意,建议使用 na.rm = FALSE,否则前导或尾随 NA 将被删除,从而导致错误。
就我个人而言,我认为以下内容更具可读性,尽管这是风格问题。
library(zoo)
df1 <- df
df1$Parameter <- na.approx(df$Parameter, maxgap = 2, na.rm = FALSE))