Я объединил две таблицы данных. В результате у меня есть два столбца фактора model
(с использованием пользовательских суффиксов - model.p
и model.a
). Теперь я хотел бы переместить model.a
значение в столбцы model.p
, если model.p
столбцы пустые (то есть равные NA
) и model.a
значение не NA
.Как заменить значения NA в одном столбце значениями из другого столбца?
Вот что я пробовал:
zz1 <- "or,d,ddate,rdate,changes,class,price,fdate,company,number,minutes,model,added,source
VA1,VA2,2014-05-24,,0,0,2124,2014-05-22 15:50:16,,B3970,,,2014-05-22 12:20:03,ss
VA1,VA2,2014-05-26,,0,0,2124,2014-05-22 15:03:44,,B1234,,A1,2014-05-22 12:20:03,s1
VA1,VA2,2014-06-05,,0,0,2124,2014-05-22 15:48:24,,,,,2014-05-22 12:20:03,s1
VA1,VA2,2014-06-09,,0,0,2124,2014-05-22 15:37:35,,,,,2014-05-22 12:20:03,s2
VA1,VA2,2014-06-16,,0,0,2124,2014-05-22 14:17:33,,,,,2014-05-22 12:20:03,ss"
zz3 <- "number,ddate,model,model_id
B3970,2014-05-24,320,AB-DVH
B1234,2014-05-26,319,BA-DVH
"
columnClasses <- c("factor", "factor", "POSIXct", "factor", "integer", "factor", "integer", "factor", "factor", "factor", "integer", "factor", "factor", "factor")
dt1 <- read.table(text=zz1, header = TRUE, sep = ",", na.strings = c(""), colClasses = columnClasses)
columnClasses <- c("factor", "POSIXct", "factor", "factor")
dt3 <- read.table(text=zz3, header = TRUE, sep = ",", comment.char = "", quote = "", na.strings = c(""), colClasses = columnClasses)
dt13 <- merge(dt1, dt3, by = c("number", "ddate"), all.x = TRUE, suffixes = c(".p", ".a"))
dt13$model.p <- as.character(dt13$model.p)
dt13$model.a <- as.character(dt13$model.a)
dt13$model.p[is.na(dt13$model.p) & !is.na(dt13$model.a)] <- dt13$model.a[is.na(dt13$model.p) & !is.na(dt13$model.a)] # (1)
dt13$model.a <- NULL
setnames(dt13, "model.p", "model")
Похоже, что я делаю что-то неправильно (не нравится линия (1) - я должен иметь такое же условие дается дважды?). Есть ли способ упростить это?
Можете ли вы, возможно, принять ответ для того, чтобы отметить вопрос, как решить? – MERose