将 NA 转换为任何类型,包括 POSIXct
Convert NA to any type, including POSIXct
我想在一个与 a 变量具有相同类型的变量中插入 NA。因此,对于可以具有任何 class 的变量 x
,我想生成相同 class 的 NA。 as(NA, class(x))
对除 POSIXct
:
以外的所有东西都适用
> x = as.POSIXct("2021-01-01")
> as(NA, class(x))
Error in class1Def@contains[[class2]] : no such index at level 1
同样适用于:
> x_na = NA
> class(x_na) = class(x)
> identical(x_na, lubridate::NA_POSIXct_)
FALSE
更广泛的上下文:我正在尝试将用户提供的 data.frame 中的特定行除某些列之外的所有列都设置为 NA,这些列可以有任意数量的任意类型的列。所以 NA 应该是同一类型的.. 使用
mutate(df, across(
-c(except, these, columns),
~ if_else(some_col == "some_value", as(NA, class(.)), .)
))
除了 POSIXct
列的上述错误外,效果很好。还有别的办法吗?
作为一个不令人满意的解决方法,POSIXct
变量的这种硬编码替代有效:
classed_na = function(x) {
if (is.POSIXct(x)) {
lubridate::NA_POSIXct_
} else {
as(NA, class(x))
}
}
像这样使用
mutate(df, across(
-c(except, these, columns),
~ if_else(some_col == "some_value", classed_na(.), .)
))
我想在一个与 a 变量具有相同类型的变量中插入 NA。因此,对于可以具有任何 class 的变量 x
,我想生成相同 class 的 NA。 as(NA, class(x))
对除 POSIXct
:
> x = as.POSIXct("2021-01-01")
> as(NA, class(x))
Error in class1Def@contains[[class2]] : no such index at level 1
同样适用于:
> x_na = NA
> class(x_na) = class(x)
> identical(x_na, lubridate::NA_POSIXct_)
FALSE
更广泛的上下文:我正在尝试将用户提供的 data.frame 中的特定行除某些列之外的所有列都设置为 NA,这些列可以有任意数量的任意类型的列。所以 NA 应该是同一类型的.. 使用
mutate(df, across(
-c(except, these, columns),
~ if_else(some_col == "some_value", as(NA, class(.)), .)
))
除了 POSIXct
列的上述错误外,效果很好。还有别的办法吗?
作为一个不令人满意的解决方法,POSIXct
变量的这种硬编码替代有效:
classed_na = function(x) {
if (is.POSIXct(x)) {
lubridate::NA_POSIXct_
} else {
as(NA, class(x))
}
}
像这样使用
mutate(df, across(
-c(except, these, columns),
~ if_else(some_col == "some_value", classed_na(.), .)
))