我有一个数据库:
structure(list(id_mujer = c(8528, 8528, 11711, 11711, 11818,
11818), hpv_post = structure(c(1339459200, 1458172800, 1443571200,
1443571200, 1354838400, 1525392000), tzone = "UTC", class = c("POSIXct",
"POSIXt")), hpv_post_res = c("NEG", "NEG", "POS", "POS", "NEG",
"NEG")), row.names = c(NA, -6L), class = c("tbl_df", "tbl", "data.frame"
))# A tibble: 6 x 3
id_mujer hpv_post hpv_post_res
<dbl> <dttm> <chr>
1 8528 2012-06-12 00:00:00 NEG
2 8528 2016-03-17 00:00:00 NEG
3 11711 2015-09-30 00:00:00 POS
4 11711 2015-09-30 00:00:00 POS
5 11818 2012-12-07 00:00:00 NEG
6 11818 2018-05-04 00:00:00 NEG我需要创建一个名为“hpv_post_res”的列,其中观察的hpv_post是"POS“,如果不是0。问题是当我这么做的时候:
base_contactos_3 %>%
mutate(positivo= if_else(hpv_post_res=="POS", hpv_post, 0))由于某种原因,我得到了这个错误:
Error: Problem with `mutate()` column `positivo`.
i `positivo = if_else(hpv_post_res == "POS", hpv_post, 0)`.
x 'origin' must be supplied
Run `rlang::last_error()` to see where the error occurred.当一个人说,如果条件是假的,放0只是因为我不知道该怎么做,它并不是超越的。但是如果不是0,而是放了一个字符串,比如:
base_contactos_3 %>%
mutate(positivo= if_else(hpv_post_res=="POS", hpv_post, "negative"))它给了我这个错误:
Error: Problem with `mutate()` column `positivo`.
i `positivo = if_else(hpv_post_res == "POS", hpv_post, "negative")`.
x `false` must be a `POSIXct/POSIXt` object, not a character vector.
Run `rlang::last_error()` to see where the error occurred.如果一个put是NA而不是0(这是我更喜欢的选项),它会给出以下错误:
Error: Problem with `mutate()` column `positivo`.
i `positivo = if_else(hpv_post_res == "POS", hpv_post, NA)`.
x `false` must be a `POSIXct/POSIXt` object, not a logical vector.
Run `rlang::last_error()` to see where the error occurred.发布于 2022-03-26 04:52:15
你的问题有两个原因:
数据帧列中的每个条目都需要具有相同的type.
if_else,要求是和否输出具有相同的类型(参见here).)
由于以下两个原因,每次尝试都失败了:
if_else(hpv_post_res == "POS", hpv_post, 0)标识输出为类型日期。由于零不是日期,所以它试图将0转换为日期。如果存在原产地日期,则可以将数值转换为日期。但是没有起源,因此errors.if_else(hpv_post_res == "POS", hpv_post, "negative")试图同时输出日期和字符串类型。this.if_else(hpv_post_res == "POS", hpv_post, NA)将不允许if_else在大多数情况下工作,因为数据帧的列可以采用值和NA。但在最严格的意义上,NA是逻辑类型的。因此,错误.解决方案:
if_else,类似于if_else,但不要求数据类型相同。但是,它将日期转换为数字。因此,如果您的输入列不是date.as.Date(ifelse(hpv_post_res == "POS", hpv_post, NA), origin = lubridate::origin()).base_contactos_3$positivo = base_contactos_3$hpv_post
base_contactos_3$positivo[base_contactos_3$hpv_post_res != "POS"] = NAhttps://stackoverflow.com/questions/71625224
复制相似问题