R Замените <NA> на дату, если значение других столбцов
Допустим, у меня есть два столбца, один из которых содержит местоположение, а другой - даты, некоторые из которых отсутствуют.
City Date
1 Sheffield 19/05/1985
2 Sheffield 21/06/1986
3 Sheffield <NA>
4 Newcastle 14/07/1996
5 Newcastle <NA>
6 Liverpool 12/11/2001
Мне нужно заменить недостающие даты фиктивной датой (скажем, 21.06.1866), но ТОЛЬКО для города Шеффилд.
В SQL синтаксис будет:
UPDATE Dataframe SET Date = "21/06/1866" WHERE city="Sheffield"
В R я пробовал следующее с ограниченным (нет) успехом:
filter <- (Dataframe$Date == is.na(Dataframe$Date) & Dataframe$City =="Sheffield")
Dataframe[filter,"Date"] <- as.Date("1866/06/21")
Однако это вызывает у меня следующую ошибку:
Ошибка в
[<-.data.frame
(*tmp*
, фильтр, "Дата", значение = -37814): пропущенные значения недопустимы при назначении подписанных кадров данных
У кого-нибудь есть идеи? Я чувствую, что это, наверное, безумно легко, но я просто пока не вижу, как это делается.
1 ответ
df[df$City == "Sheffield" & is.na(df$Date), "Date"] = as.Date("1866/06/21", format = "%Y/%m/%d")
> df
City Date
1 Sheffield 1985-05-19
2 Sheffield 1986-06-21
3 Sheffield 1866-06-21
4 Newcastle 1996-07-14
5 Newcastle <NA>
6 Liverpool 2001-11-12
если вы посмотрите на свой фильтр, он просто вернет FALSE.
> filter <- (df$Date == is.na(df$Date) & df$City =="Sheffield")
> filter
[1] FALSE FALSE FALSE FALSE FALSE FALSE
Вам просто нужно написать is.na(df$Date)
это возвратит логический вектор, указывающий, является ли дата NA. То, что вы написали проверки даты - ИСТИНА или ЛОЖЬ (возвращено из is.na(df$Date)
), которого никогда не бывает, потому что это свидание.
> filter <- (is.na(df$Date) & df$City =="Sheffield")
> filter
[1] FALSE FALSE TRUE FALSE FALSE FALSE