как я могу удалить некоторые строки NA, но не все из них

#list #dataframe #replace #regression #na

Вопрос:

У меня есть несколько фреймов данных с информацией о зарегистрированных компаниях за 2000 год, поэтому я хочу поместить их в список (назовем его df), потому что я хочу провести регрессию по ним. Но компании, которые были перечислены, например, в 2005 году, будут иметь значения NA в строках до 2005 года, и я хочу удалить строки до того, как компания была указана для каждого фрейма данных (и количество строк NA варьируется в каждом фрейме данных).

Я знаю только о лапли(df, na.опустить). но проблема в том, что, поскольку в данных отсутствуют некоторые значения, например, когда компания не записала какую-либо переменную, поэтому для этого ЕДИНСТВЕННОГО значения даже после 2005 года существует NA, и я хочу заменить его нулем, а не удалять всю строку.

Как я могу удалить первые строки со значениями NA, но заменить их в данных нулями с помощью R?

Комментарии:

1. Я рекомендую опубликовать код для создания образцов данных.

2. Вы ищете код на R или python?? или вы просто ищете алгоритм??

3. @MuhammadRasel, в R

Ответ №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, ]