Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
替换R数据帧中的无限值[为什么'is.infinite()'的行为不像'is.na()`]_R_Dplyr_Tidyr - Fatal编程技术网

替换R数据帧中的无限值[为什么'is.infinite()'的行为不像'is.na()`]

替换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

如果我尝试用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,将所有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