首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >引用mutate_at / mutate_all / mutate_if中的固定列

引用mutate_at / mutate_all / mutate_if中的固定列
EN

Stack Overflow用户
提问于 2021-09-22 20:23:26
回答 1查看 23关注 0票数 1

我尝试做一个简单的任务:对于dataset中的所有字符列,如果引用的列是"#NA#",并且age列大于14,我希望将"#NA#"转换为999,因此我的数据帧如下所示:

代码语言:javascript
复制
age   var1     var2      num_var
20    "#NA#"  "hello"    35
30    "bye"  "#NA#"      32
10    "hi"  "#NA#"       35

并希望将其转换为以下内容:

代码语言:javascript
复制
age   var1     var2      num_var
20    999  "hello"     35
30    "bye"  999       32
10    "hi"   "#NA#"    35

(也可以是"999“而不是999)

尝试了下面这样的方法:

代码语言:javascript
复制
replace_NA <- function(x){
  if_else(x=="#NA#" & age>14, 999, x)}

df %>%  mutate_if(is.character, replace_NA))

但是我得到了一个object 'age' not found错误。在这种情况下能做些什么呢?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-22 20:24:49

我们可以将函数更改为'age‘作为输入参数。此外,更改'yes‘以返回字符元素而不是数字,即"999",因为与ifelse相比,if_else是特定于类型的

代码语言:javascript
复制
replace_NA <- function(x, age){
  if_else(x=="#NA#" & {{age}}>14, "999", x)
}

并将其测试为

代码语言:javascript
复制
library(dplyr)
df %>% 
    mutate(across(where(is.character), replace_NA, age = age))

-output

代码语言:javascript
复制
   age var1  var2 num_var
1  20  999 hello      35
2  30  bye   999      32
3  10   hi  #NA#      35

数据

代码语言:javascript
复制
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))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69290844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档