如何删除一些 NA 行但不是全部

问题描述

我有多个数据框,其中包含 2000 年上市公司的信息,所以我想将它们放在一个列表中(我们称之为 df),因为我想对它们进行回归。但是,例如,在 2005 年上市的公司将在 2005 年之前的行上有 NA 值,我想在为每个数据框列出公司之前删除这些行(并且每个数据框中的 NA 行数各不相同)。>

我只知道 lapply(df,na.omit)。但问题在于,由于数据中存在一些缺失值,例如一家公司没有记录一些变量,所以即使在 2005 年之后,该 SINGLE 值也有 NA,我想用零替换它而不是删除整行。

如何删除带有 NA 值的第一行,但使用 R 将数据中的行替换为零?

解决方法

假设 Company 是公司名称列,date 是日期列,value 是您的操作所需的列,请尝试以下任一列:

如果您在数据框中确实有公司明智的开始日期,比如 joinig_df 那么这很容易:

df$start_dates <- merge(df,joinig_df,by="company")
df <- df[df$date>=df$start_dates,]
df$value[is.na(df$value)] <- 0

如果您在上述单独的 df 中没有加入日期,请​​尝试以下操作:

df$value[is.na(df$value)] < -0
df <- df[order(df$dompany,df$date),] # Ensure data is sorted over company and by dates
df$val_csum <- ave(df$value,df$id,FUN=cumsum) # Do a cumulative sum of values
df <- df[df$val_csum>0,]