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



我正在R中进行报告自动化。我们要做的一件事是查看进入商店的客户,并将他们的年龄记录估计为估计年龄。我们被指示在报告中使用估计年龄作为年龄际年龄,则该年龄将成为年龄际年龄的值。对于确实具有实际年龄值的记录,我需要将估计年龄实年龄值(只要存在(。没有实际年龄的记录应保持不变。

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

用实际年龄代替估计年龄

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

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

查看(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知识的替代方案,只需进行合并,dplyr库中提供了合并。结果:与上述尝试相同的问题将继续研究。

我不知道你为什么说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))

问题的一部分是年龄值存储为始终以零开头的范围。因此,一个24岁的人的年龄应该是0-24岁。在确定价格之前,我无法使用dplyr::coalize解决方案。另外,它不适用于变异片段,所以我把它取了下来。

以下是最终对我有效的方法!

#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))

最新更新