【发布时间】:2019-02-05 21:13:16
【问题描述】:
这是我到目前为止所做的 data 是数值数据类型
if (is.na(data) || attribute==0){replace(data,NA)}
它给了我错误信息
替换错误(属性,NA):缺少参数“值”,没有默认值
【问题讨论】:
-
您错误地使用了
replace。见help(replace)
标签: r
这是我到目前为止所做的 data 是数值数据类型
if (is.na(data) || attribute==0){replace(data,NA)}
它给了我错误信息
替换错误(属性,NA):缺少参数“值”,没有默认值
【问题讨论】:
replace。见help(replace)
标签: r
与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)))
【讨论】:
install.packages('dplyr') 然后library(dplyr) 应该为您提供最新版本。你的dplyr 版本可能已经过时了。
您可以只使用replace 而无需任何附加功能/包:
data <- replace(data, data == 0, NA)
现在假设 data 是您的数据框。
否则,您可以简单地插入列名,例如如果您的数据框是df 和列名data:
df$data <- replace(df$data, df$data == 0, NA)
【讨论】:
df %>% map_df(~ na_if(.x, 0))
假设data 是dataframe,那么您可以使用sapply 根据一组过滤器更新您的值:
new.data = as.data.frame(sapply(data,FUN= function(x) replace(x,is.na(x) | x == 0)))
【讨论】: