在R中使用相同的函数(转换)突变多个列

3lxsmp7m  于 2023-03-20  发布在  其他
关注(0)|答案(1)|浏览(100)

我正尝试通过对多个列应用相同的转换来创建新列。
示例代码如下:

df %>% 
mutate(
   use_ = case_when(
      use %in% c(1, 2, 3) ~ 0,
      use %in% c(4, 5) ~ 1),
    complex_ = case_when(
      complex %in% c(1, 2, 3) ~ 0,
      complex %in% c(4, 5) ~ 1),
    easy_ = case_when(
      easy %in% c(1, 2, 3) ~ 0,
      easy %in% c(4, 5) ~ 1)
)

我实际上是在尝试在R中复制SAS在阵列中可以轻松完成的一些事情。示例代码如下:

array orig (*)  use complex easy;
array new  (*)  use_ complex_ easy_;

  do i=1 to dim(new);
  if orig(i)=. then new(i)=.;
  else if orig(i) in (1,2,3) then new(i)=0;
  else if orig(i) in (4,5) then new(i)=1;
  end;
  drop i;

我创建了一个函数

recoding_fn <- function(a){
     a_ = case_when(
      a %in% c(1, 2, 3) ~ 0,
      a %in% c(4, 5) ~ 1
      )
    
    return(a_)
}

当我应用到一个列时,它工作了,但是列名变成了“recoding_fn(use)”,这不完全是我想要的。

df %>% 
mutate(recoding_fn(use))

另一个问题是如何应用该函数(或任何其他策略),以便它对我感兴趣的三列(use、complex、easy)进行重新编码。
这是可以在mutate中实现的吗?
我很感激你的帮助。谢谢。

uqzxnwby

uqzxnwby1#

感谢@JonSpring的回答:

library(dplyr)
data.frame(use = 1:5, complex = 5:1) %>% 
    mutate(across(c(use, complex), ~recoding_fn(.), .names = "{.col}_new"))

相关问题