如何替换中的R 0或NA缺失值[重复]

问题描述 投票:0回答:4

这个问题已经在这里有一个答案:

这是我已经做了到目前为止的数据是数字数据类型

if (is.na(data) || attribute==0){replace(data,NA)}

它给了我错误消息

错误的更换(属性,NA):参数“值”缺失,没有默认值

r
4个回答
0
投票

你可以只使用replace没有任何额外的功能/包:

data <- replace(data, data == 0, NA)

这是现在假设data是您的数据帧。

否则,你可以简单地插入的列名,例如如果你的数据帧是df和列名data

df$data <- replace(df$data, df$data == 0, NA)

3
投票

随着mutate_all

library(dplyr)

df %>%
  mutate_all(~replace(., . == 0, NA))

mutate_if是安全的:

df %>%
  mutate_if(is.numeric, ~replace(., . == 0, NA))

请注意,有没有必要检查NA的,因为我们与NA反正更换。

输出:

> df %>%
+   mutate_all(~replace(., . == 0, NA))
    X  Y    Z
1   1  5 <NA>
2   4  4    2
3   2  3    2
4   5  5    2
5   5  3 <NA>
6  NA  4 <NA>
7   3  3    1
8   5  3    2
9   3  1    1
10  2 NA    5
11  5  5 <NA>
12  2  5    2
13  4  4    4
14  3  4 <NA>
15 NA NA    3
16  5  2    1
17  1  4 <NA>
18 NA  1    4
19  1  1    5
20  5  1    2

> df %>%
+   mutate_if(is.numeric, ~replace(., . == 0, NA))
    X  Y Z
1   1  5 0
2   4  4 2
3   2  3 2
4   5  5 2
5   5  3 0
6  NA  4 0
7   3  3 1
8   5  3 2
9   3  1 1
10  2 NA 5
11  5  5 0
12  2  5 2
13  4  4 4
14  3  4 0
15 NA NA 3
16  5  2 1
17  1  4 0
18 NA  1 4
19  1  1 5
20  5  1 2

数据:

set.seed(123)
df <- data.frame(X = sample(0:5, 20, replace = TRUE),
                 Y = sample(0:5, 20, replace = TRUE),
                 Z = as.character(sample(0:5, 20, replace = TRUE)))

1
投票

假设datadataframe那么你可以使用sapply更新基于一组过滤你的价值观:

new.data = as.data.frame(sapply(data,FUN= function(x) replace(x,is.na(x) | x == 0)))

-1
投票

tidyr :: replace_na()不只是这一点:https://tidyr.tidyverse.org/reference/replace_na.html

© www.soinside.com 2019 - 2024. All rights reserved.