在我的数据集中,活动的持续时间以小时(列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"))
我们可以在此处使用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。