首页 > 解决方案 > 在 R 中,当替换列不为空时,如何将一列中的值替换为另一列的值?

问题描述

我正在研究自动化 R 中的报告。我们要做的一件事是查看进入商店的客户并估计他们的年龄记录,即Estimate Age。我们被指示在报告中使用估计年龄作为年龄,以便所有各方都有一个年龄。如果我们能够记录某人的实际年龄,那么那个年龄就变成了年龄。大多数记录没有实际年龄值。对于确实具有实际年龄值的记录,我需要将估计年龄值替换为实际年龄值(只要它存在)。没有实际年龄的记录应保持不变。

我是一个新手,几个月来一直坚持这一步。向 stackoverflow 大神求个祝福。如果有帮助,请查看图片。

用实际年龄代替估计年龄

我已经尝试过:尝试了两种不同方法的几种变体,用实际年龄替换估计年龄,再次无济于事:

1)Age <- ifelse(is.null(MyReport$ActualAge), MyReport$ActualAge, MyReport$EstimatedAge)

View(MyReport) 2) 也是这样的,但我调整了很多,所以不完全像这样,我把它搞砸了

select <- is.null(MainReportload$ActualAge) < 0.01
df[select,MyReport$EstimatedAge] <- df[select, MyReport$ActualAge]

3)

if(is.null(MyReport$ActualAge)) {
  MyReport$Age <- MyReport$EstimatedAge
} else {
  MyReport$Age <- MyReport$ActualAge
  }
MyReport$Age
View(MyReport)

8.6.19 基于大脑和最少 SQL 知识的替代方案,只需做一个 coalesce,coalesce 在 dplyr 库中可用。结果:与上述尝试相同的问题将继续研究。

标签: rreplaceautomationconditional-statements

解决方案


我不确定你为什么说这dplyr::coalesce不起作用,这是一个简化的通用示例。如果您发布数据的可重现版本,我们可以提供更多帮助。合并的关键是它返回第一个非缺失值。所以coalesce(estimated_age, age) != coalesce(age, estimated_age)

# example data
df <- readr::read_csv("
age, estimated_age
12, 14
NA, 13
NA, NA
15, NA
")

# coalesce
df2 <- dplyr::mutate(df, new_age = dplyr::coalesce(age, estimated_age))


推荐阅读