我尝试做一个简单的任务:对于dataset中的所有字符列,如果引用的列是"#NA#",并且age列大于14,我希望将"#NA#"转换为999,因此我的数据帧如下所示:
age var1 var2 num_var
20 "#NA#" "hello" 35
30 "bye" "#NA#" 32
10 "hi" "#NA#" 35并希望将其转换为以下内容:
age var1 var2 num_var
20 999 "hello" 35
30 "bye" 999 32
10 "hi" "#NA#" 35(也可以是"999“而不是999)
尝试了下面这样的方法:
replace_NA <- function(x){
if_else(x=="#NA#" & age>14, 999, x)}
df %>% mutate_if(is.character, replace_NA))但是我得到了一个object 'age' not found错误。在这种情况下能做些什么呢?
谢谢
发布于 2021-09-22 20:24:49
我们可以将函数更改为'age‘作为输入参数。此外,更改'yes‘以返回字符元素而不是数字,即"999",因为与ifelse相比,if_else是特定于类型的
replace_NA <- function(x, age){
if_else(x=="#NA#" & {{age}}>14, "999", x)
}并将其测试为
library(dplyr)
df %>%
mutate(across(where(is.character), replace_NA, age = age))-output
age var1 var2 num_var
1 20 999 hello 35
2 30 bye 999 32
3 10 hi #NA# 35数据
df <- structure(list(age = c(20L, 30L, 10L), var1 = c("#NA#", "bye",
"hi"), var2 = c("hello", "#NA#", "#NA#"), num_var = c(35L, 32L,
35L)), class = "data.frame", row.names = c(NA, -3L))https://stackoverflow.com/questions/69290844
复制相似问题