在R中,当替换列不为空时,如何用另一列的值替换一列中的值?

在R中,当替换列不为空时,如何用另一列的值替换一列中的值?,r,replace,automation,conditional-statements,R,Replace,Automation,Conditional Statements,我正在研究在R中自动生成一份报告。我们做的一件事是查看进入商店的客户,并将他们的年龄记录作为估计年龄。我们被指示在报告中使用估计年龄作为年龄,以便所有各方都有一个年龄。如果我们能够记录某人的实际年龄,那么这个年龄就变成了年龄。大多数记录没有实际年龄的值。对于具有实际年龄值的记录,只要存在,我就需要用实际年龄值替换估计年龄值。没有实际年龄的记录应保持不变 我是个新手,已经在这一步上坚持了好几个月了。向诸神祈求祝福。如果有帮助,请查看图片 我已经试过了: 尝试了两种不同方法的多种变体,以实际年龄替

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

我是个新手,已经在这一步上坚持了好几个月了。向诸神祈求祝福。如果有帮助,请查看图片

我已经试过了: 尝试了两种不同方法的多种变体,以实际年龄替换估计年龄,但同样无效:


1)
Age我不知道你为什么说
dplyr::coalesce
不起作用,下面是一个简化的通用示例。如果您发布数据的可复制版本,我们可以提供更多帮助。合并的关键是它返回第一个非缺失值。所以
合并(估计年龄,年龄)!=合并(年龄、估计年龄)

#示例数据

df部分问题是年龄值存储为始终以零开头的范围。所以一个24岁的人的年龄应该是0-24岁。在确定价格之前,我无法使用dplyr::coalesce解决方案。而且,它对变异的部分不起作用,所以我把它去掉了

下面是我最后的工作

    #USING ACTUAL AGE WHENEVER IT IS PRESENT AND ESTIMATED AGE WHEN THERE ISN'T AN ACTUAL AGE
#Remove hyphens from age fields and store the column as integers

main_df$Actual.Age <- as.integer( gsub("-", "", main_df$Actual.Age))
main_df$EstimatedAge <- as.integer( gsub("-", "", main_df$EstimatedAge))


#Use Coalesce to create a new column that contains the NEW Age values. 
main_df$new_EstimatedAge <- dplyr::coalesce(main_df$Actual.Age, 
main_df$EstimatedAge)
#view(head(main_df$new_EstimatedAge, 30))
#只要存在实际年龄,就使用它;如果没有实际年龄,就使用估计年龄
#从年龄字段中删除连字符并将列存储为整数

R中的main_df$Actual.Age,a
data.frame
将不会有
NULL
列;如果将
NULL
指定给列,则该列将被删除。(有很多方法可以将
NULL
值作为列表列嵌入到列中,但这需要付出努力…而且会破坏很多东西。)我的猜测是,实际上您要么有
NA
值,要么是空字符串(您的图片几乎没有任何细节,所以我猜)。另外,我认为您有向后
ifelse
的yes/no参数。请尝试
ifelse(is.na(MyReport$ActualAge)、MyReport$EstimatedAge、MyReport$ActualAge)
。能否添加一个小的可复制示例以及预期输出?你可以阅读如何给出一个可复制的例子。谢谢大家的回答!部分问题是年龄值存储为始终以零开头的范围。所以一个24岁的人的年龄应该是0-24岁。在我确定价格之前,我无法使用您的dplyr::coalesce解决方案。而且它和变异的部分不起作用,所以我把它去掉了。Stack不允许我粘贴在这里工作的内容,因为它太长了,所以我将在单独的注释中进行粘贴。
if(is.null(MyReport$ActualAge)) {
  MyReport$Age <- MyReport$EstimatedAge
} else {
  MyReport$Age <- MyReport$ActualAge
  }
MyReport$Age
View(MyReport)
# 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))

    #USING ACTUAL AGE WHENEVER IT IS PRESENT AND ESTIMATED AGE WHEN THERE ISN'T AN ACTUAL AGE
#Remove hyphens from age fields and store the column as integers

main_df$Actual.Age <- as.integer( gsub("-", "", main_df$Actual.Age))
main_df$EstimatedAge <- as.integer( gsub("-", "", main_df$EstimatedAge))


#Use Coalesce to create a new column that contains the NEW Age values. 
main_df$new_EstimatedAge <- dplyr::coalesce(main_df$Actual.Age, 
main_df$EstimatedAge)
#view(head(main_df$new_EstimatedAge, 30))