gpt4 book ai didi

R 替换所有列的 NA 除 *

转载 作者:行者123 更新时间:2023-12-04 00:19:35 25 4
gpt4 key购买 nike

library(tidyverse)
df <- tibble(Date = c(rep(as.Date("2020-01-01"), 3), NA),
col1 = 1:4,
thisCol = c(NA, 8, NA, 3),
thatCol = 25:28,
col999 = rep(99, 4))
#> # A tibble: 4 x 5
#> Date col1 thisCol thatCol col999
#> <date> <int> <dbl> <int> <dbl>
#> 1 2020-01-01 1 NA 25 99
#> 2 2020-01-01 2 8 26 99
#> 3 2020-01-01 3 NA 27 99
#> 4 NA 4 3 28 99

我的实际 R 数据框有数百列没有整齐命名,但可以通过 df 来近似。上面的数据框。

我想替换 NA 的所有值与 0 ,除了几列(在我的示例中,我想省略 Date 列和 thatCol 列。我想以这种方式进行:
df %>% replace(is.na(.), 0)
#> Error: Assigned data `values` must be compatible with existing data.
#> i Error occurred for column `Date`.
#> x Can't convert <double> to <date>.
#> Run `rlang::last_error()` to see where the error occurred.

下面显示了我完成“除”之外的所有内容替换 NA 的失败想法。
df %>% replace(is.na(c(., -c(Date, thatCol)), 0))
df %>% replace_na(list([, c(2:3, 5)] = 0))
df %>% replace_na(list(everything(-c(Date, thatCol)) = 0))

有没有办法以我需要的方式选择所有内容?有数百个列,名称不一致,因此逐一键入它们不是一个实用的选择。

最佳答案

您可以使用 mutate_at :

library(dplyr)

按名称删除它们
df %>% mutate_at(vars(-c(Date, thatCol)), ~replace(., is.na(.), 0))

按位置删除它们
df %>% mutate_at(-c(1,4), ~replace(., is.na(.), 0))

按名称选择它们
df %>% mutate_at(vars(col1, thisCol, col999), ~replace(., is.na(.), 0))

按位置选择它们
df %>% mutate_at(c(2, 3, 5), ~replace(., is.na(.), 0))

如果您想使用 replace_na
df %>% mutate_at(vars(-c(Date, thatCol)), tidyr::replace_na, 0)

请注意 mutate_at即将被 across 取代在 dplyr 1.0.0 .

关于R 替换所有列的 NA 除 *,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61543966/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com