如何将一列中的NA值替换为另一列中的值?

时间:2015-04-17 20:41:26

标签: r dataframe data.table

我合并了两个数据表。结果我有两个因子列model(使用自定义后缀 - model.pmodel.a)。现在,如果model.a列为空(即等于model.p)且model.p值不为{,则我希望将NA值移至model.a列{1}}。

以下是我的尝试:

NA

看起来我做错了(不喜欢第(1)行 - 我应该给两次相同的条件吗?)。有什么方法可以简化吗?

2 个答案:

答案 0 :(得分:2)

你可以这样做:

dt13$model.p = with(dt13, ifelse(is.na(model.p) & !is.na(model.a), model.a, model.p)

答案 1 :(得分:0)

我在data.table标记上看到了这个问题,您也使用了setnames这是data.table函数。因此,留下一个data.table解决方案,非常简单。

library(data.table)
DT1 <- as.data.table(dt1)[, model := as.character(model)]
DT3 <- as.data.table(dt3)[, model := as.character(model)]
setkeyv(DT1, c("number", "ddate"))
setkeyv(DT3, c("number", "ddate"))
DT1[DT3, `:=`(model_id = i.model_id, model = ifelse(is.na(model),i.model,model))][]
#     or   d      ddate rdate changes class price               fdate company number minutes model               added source model_id
# 1: VA1 VA2 2014-06-05    NA       0     0  2124 2014-05-22 15:48:24      NA     NA      NA    NA 2014-05-22 12:20:03     s1       NA
# 2: VA1 VA2 2014-06-09    NA       0     0  2124 2014-05-22 15:37:35      NA     NA      NA    NA 2014-05-22 12:20:03     s2       NA
# 3: VA1 VA2 2014-06-16    NA       0     0  2124 2014-05-22 14:17:33      NA     NA      NA    NA 2014-05-22 12:20:03     ss       NA
# 4: VA1 VA2 2014-05-26    NA       0     0  2124 2014-05-22 15:03:44      NA  B1234      NA    A1 2014-05-22 12:20:03     s1   BA-DVH
# 5: VA1 VA2 2014-05-24    NA       0     0  2124 2014-05-22 15:50:16      NA  B3970      NA   320 2014-05-22 12:20:03     ss   AB-DVH