微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何删除一些 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,]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。