R 用另一个值将列中的值替换到数据框中(所有值相同)

R 用另一个值将列中的值替换到数据框中(所有值相同),r,replace,R,Replace,我的数据框由21列组成,对于此问题,只有一列相关: 我希望将列a中的值2或3或4或5替换为值1(在同一列中) 除了为任何值2,3,4,5执行下面的代码之外,我正在寻找更优雅的代码: df <- df %>% mutate (a = replace(a, a == 2,1)) df <- df %>% mutate (a = replace(a, a == 3,1)) df <- df %>% mutate (a = replace(a, a ==

我的数据框由21列组成,对于此问题,只有一列相关: 我希望将列a中的值2或3或4或5替换为值1(在同一列中)

除了为任何值2,3,4,5执行下面的代码之外,我正在寻找更优雅的代码:

  df <- df %>% mutate (a = replace(a, a == 2,1))
  df <- df %>% mutate (a = replace(a, a == 3,1))
  df <- df %>% mutate (a = replace(a, a == 4,1))
  df <- df %>% mutate (a = replace(a, a == 5,1))
df%变异(a=replace(a,a==2,1))
df%变异(a=替换(a,a==3,1))
df%变异(a=替换(a,a==4,1))
df%变异(a=替换(a,a==5,1))
所以我只需要在代码中输入条件“或”我需要创建。。。
有什么解决方案吗?

您可以在
中使用
替换多列,并在%
中使用
%替换多个值。例如,如果要替换列
a
b
c
d
中的值,可以执行以下操作:

library(dplyr)
df <- df %>% mutate(across(a:d, ~replace(., . %in% 2:5, 1)))
#For dplyr < 1.0.0 use `mutate_at`
#df <- df %>% mutate_at(vars(a:d), ~replace(., . %in% 2:5, 1))

但是如果我的价值观中没有时间顺序,我怎么写呢?例如3,6,8,2您可以使用
replace(,.%在%c(3,6,8,2),1)
cols <- c('a','b','c','d')
df[cols] <- lapply(df[cols], function(x) replace(x, x %in% 2:5, 1))