Mat*_*ica 3 r missing-data dataframe na
我有一个包含多列的数据框 df 。
其中两列( AGE 和 SALARY 列)的类型为 double 。
我想用 0 替换 AGE 列的缺失值,
用“未找到”替换 SALARY 列的缺失值。
最有效的方法是什么?
replace_na(df, list(AGE=0, SALARY="not found"))
Run Code Online (Sandbox Code Playgroud)
我收到错误:
Error in `stop_vctrs()`:
! Can't convert `replace$SALARY` <character> to match type of `data$SALARY` <double>.
Backtrace:
1. tidyr::replace_na(df, list(AGE= 0, SALARY= "not found"))
2. tidyr:::replace_na.data.frame(df, list(AGE= 0, SALARY= "not found"))
3. vctrs::vec_assign(...)
4. vctrs `<fn>`()
5. vctrs::vec_default_cast(...)
6. vctrs::stop_incompatible_cast(...)
7. vctrs::stop_incompatible_type(...)
8. vctrs:::stop_incompatible(...)
9. vctrs:::stop_vctrs(...)
Run Code Online (Sandbox Code Playgroud)
编辑:这是我的数据集的来源:https://drive.google.com/file/d/1cKxzNrnIMq4RxdMcBz3nlr7YtYaPhn5_/view ?usp=sharing
Jam*_*mes 12
将 tidyr 更新到版本 1.2.0 后我遇到了同样的问题
来自 tidyr 的变更日志:
在应用替换时,replace_na() 不再允许更改数据类型。现在,replace 将始终转换为进行替换之前的数据类型。例如,这意味着不再允许在整数列上使用替换值 1.5。类似地,替换列表列中的缺失值现在必须使用 list("foo") 而不仅仅是 "foo" 来完成。
您正在尝试转换两列“年龄”和“薪水”。
单独转换“Age”应该可以,因为它可能是 double 类型,并且您将 NA 转换为 0,也是 double 类型。
mutate(Age = replace_na(Age, 0) #This should work
但是,当您尝试replace_na在“薪水”中使用字符串“未找到”时,您必须将该列转换为字符。replace_na过去会自动执行此操作,但现在不再这样做了。您可以通过添加对as.character 的调用来解决此问题
mutate(Salary = replace_na(Salary, "not found") #used to work
新方法:
mutate(Salary = replace_na(as.character(Salary), "not found") #New method