【问题标题】:how can I remove some NA rows but not all of them如何删除一些 NA 行但不是全部
【发布时间】:2021-10-06 17:18:07
【问题描述】:

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

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

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

【问题讨论】:

  • 我建议发布代码以生成示例数据。
  • 您在寻找 R 或 python 中的代码吗?或者你只是在寻找一种算法??
  • @MuhammadRasel,在 R

标签: list dataframe replace regression na


【解决方案1】:

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

如果您在数据框中确实有公司明智的开始日期,比如 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, ]

【讨论】:

    猜你喜欢
    • 2019-02-05
    • 2019-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-26
    • 2015-05-11
    • 1970-01-01
    • 2015-09-26
    相关资源
    最近更新 更多