替换R数据帧中的无限值[为什么'is.infinite()'的行为不像'is.na()`]
如果我尝试用is.infinite复制此逻辑,则会出现以下情况:替换R数据帧中的无限值[为什么'is.infinite()'的行为不像'is.na()`],r,dplyr,tidyr,R,Dplyr,Tidyr,如果我尝试用is.infinite复制此逻辑,则会出现以下情况: df %>% replace(is.na(.), 0) #> # A tibble: 3 x 2 #> col1 col2 #> <chr> <dbl> #> 1 A 0 #> 2 B Inf #> 3 C 5 看看这一点,我可以拼凑出如下所示的解决方案。这将获取我的原始数据帧,并将所有NA转换为0,将所有I
df %>% replace(is.na(.), 0)
#> # A tibble: 3 x 2
#> col1 col2
#> <chr> <dbl>
#> 1 A 0
#> 2 B Inf
#> 3 C 5
看看这一点,我可以拼凑出如下所示的解决方案。这将获取我的原始数据帧,并将所有NA转换为0,将所有Inf转换为1。为什么is.infinite的行为不像is.na?还有什么更好的方法来实现我的愿望
df %>% replace(is.infinite(.), 1)
#> Error in is.infinite(.) : default method not implemented for type 'list'
is.infinite根据?is.infinite期望输入“x”是原子向量
要测试的x对象:默认方法处理原子向量
而?is.na可以将向量、矩阵、数据帧作为输入
要测试的R对象:is.na和anyNA的默认方法处理原子向量、列表、成对列表和NULL
而且通过检查方法,
我们可以将代码中的替换修改为
methods('is.na')
#[1] is.na.data.frame is.na.data.table* is.na.numeric_version is.na.POSIXlt is.na.raster* is.na.vctrs_vctr*
methods('is.infinite') # only for vectors
#[1] is.infinite.vctrs_vctr*
is.infinite根据?is.infinite期望输入“x”是原子向量
要测试的x对象:默认方法处理原子向量
而?is.na可以将向量、矩阵、数据帧作为输入
要测试的R对象:is.na和anyNA的默认方法处理原子向量、列表、成对列表和NULL
而且通过检查方法,
我们可以将代码中的替换修改为
methods('is.na')
#[1] is.na.data.frame is.na.data.table* is.na.numeric_version is.na.POSIXlt is.na.raster* is.na.vctrs_vctr*
methods('is.infinite') # only for vectors
#[1] is.infinite.vctrs_vctr*
如果您选中?is.infinite-x-R要测试的对象:默认方法处理原子向量。其中?is.na有矩阵/data.frame/vector的方法。i、 要测试的R对象:is.na和anyNA的默认方法处理原子向量、列表、成对列表和NULL。您可以尝试df%>%mutate\u ifis.numeric、replace\u na、0%>%mutate\u ifis.numeric、~replace.,is.infinite.,1您可以执行df%>%replacesaply.,is.infinite、1Thanks,不过稍微更正一下,就是这样;df%>%replaceSaply.na.,0%>%replaceSaply.,is.infinite,1.如果选中?is.infinite-x-R要测试的对象:默认方法处理原子向量。其中?is.na有矩阵/data.frame/vector的方法。i、 要测试的R对象:is.na和anyNA的默认方法处理原子向量、列表、成对列表和NULL。您可以尝试df%>%mutate\u ifis.numeric、replace\u na、0%>%mutate\u ifis.numeric、~replace.,is.infinite.,1您可以执行df%>%replacesaply.,is.infinite、1Thanks,不过稍微更正一下,就是这样;df%>%replaceis.na.,0%>%replacesaply.,is.infinite,1。
methods('is.na')
#[1] is.na.data.frame is.na.data.table* is.na.numeric_version is.na.POSIXlt is.na.raster* is.na.vctrs_vctr*
methods('is.infinite') # only for vectors
#[1] is.infinite.vctrs_vctr*
library(dplyr)
df %>%
mutate_if(is.numeric, ~ replace_na(., 0) %>%
replace(., is.infinite(.), 1))
# A tibble: 3 x 2
# col1 col2
# <chr> <dbl>
#1 A 0
#2 B 1
#3 C 5