Ifelse 应用于列间隔,但保留所有其他列

Ifelse applied to an interval of columns, but keeping all the other columns

我想使用 ifelse 函数将新的 values 归因于 df 中的一组 columns。真正的df有>200个columns,所以我不能说出columns的名字,而是需要指定columns的区间(例如2:205).

df <- data.frame(x=c(123, 121, 120, 124, 125), y=c(1, 0, 0, 0, 1), z=c(0,0, 0, 0, 1))
df
    x y z
1 123 1 0
2 121 0 0
3 120 0 0
4 124 0 0
5 125 1 1

但是,当我指定列的间隔时,第一个 column 被跳过。如何保持第一个 column 不变?

df2 <- as.data.frame(ifelse(df[2:3] == 1, 2, 0))
df2
  y z
1 2 0
2 0 0
3 0 0
4 0 0
5 2 2

谢谢。

最简单的解决方案是使用您当前的代码,但使用 df[2:3]<-function(df[2:3]):

将您的输出重新分配给原始数据的同一子集
df2<-df
df2[2:3]<- as.data.frame(ifelse(df[2:3] == 1, 2, 0))
df2
    x y z
1 123 2 0
2 121 0 0
3 120 0 0
4 124 0 0
5 125 2 2

或者我们可以使用 dplyr:

library(dplyr)

df %>% mutate(across(2:3, ~ifelse(.x==1, 2, 0)))

    x y z
1 123 2 0
2 121 0 0
3 120 0 0
4 124 0 0
5 125 2 2