如何检查R中replace()函数中的NA是否存在?

问题描述 投票:0回答:1

在我的数据集中,活动的持续时间以小时(列duration_hours)或分钟(列duration_minutes)给出。如果以小时为单位给出,则duration_minutes列为空(NA),反之亦然。我现在想通过将它们除以60(分钟)来将以分钟为单位的值转换为小时。

为此,我尝试了此命令:

df <- df %>% mutate(duration_recoded = replace(duration_minutes, !is.na(duration_minutes), duration_minutes / 60))

但是,该命令产生不正确的结果,并显示以下警告消息:

Warning message:
In x[list] <- values :
  number of items to replace is not a multiple of replacement length

有人可以告诉我我的错误在哪里吗?

以下是一些示例数据:

structure(list(health_distance_hours = c(NA, NA, 2, 1, 1), health_distance_minutes = c(30, 
25, NA, NA, NA)), row.names = c(NA, -5L), class = c("tbl_df", 
"tbl", "data.frame"))
r dplyr
1个回答
1
投票

我们可以在此处使用coalesce()包中的dplyr功能:

library(dplyr)
df <- df %>% mutate(duration_recoded = coalesce(duration_hours, duration_minutes / 60))

这应该起作用,因为如果duration_hours不是NA,则coalesce会简单地将其抓取并将其分配给duration_recorded。如果duration_hours实际上是NA,则它将通过并且取duration_minutes除以​​60。

© www.soinside.com 2019 - 2024. All rights reserved.