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
我想使用 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