在R中使用iflelse替换值

Met*_*ics 4 if-statement r multiple-columns

我有一个非常简单的问题,数据如下:

sample<-list(c(10,12,17,7,9,10),c(NA,NA,NA,10,12,13),c(1,1,1,0,0,0))
sample<-as.data.frame(sample)
colnames(sample)<-c("x1","x2","D")

>sample
x1  x2  D
10  NA  1
12  NA  1
17  NA  1
7   10  0
9   20  0
10  13  0
Run Code Online (Sandbox Code Playgroud)

注意:D = 1的观测数与D = 0相同

现在,我想创建一个变量x3,该变量具有与D=0何时D=1相关的值以及与D=1when 相关的值D=0.预期产量:

x1  x2  D   x3
10  NA  1   10
12  NA  1   20
17  NA  1   13
7   10  0   NA
9   20  0   NA
10  13  0   NA
Run Code Online (Sandbox Code Playgroud)

我尝试使用ifelse如下函数:

sample.data$x3<-with(sample.data, ifelse(D==1,x2[which(D==0)],x2[which(D==1)]))
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

logical(0)
Run Code Online (Sandbox Code Playgroud)

我也尝试过以下方法:

sample.data$x3<-with(sample.data, ifelse(D==1,tail(x2,3),head(x2,3)))
Run Code Online (Sandbox Code Playgroud)

再次,我得到了同样的错误:

logical(0)
Run Code Online (Sandbox Code Playgroud)

知道这里发生了什么吗?

sta*_*ant 5

你知道吗data.table,这是一个解决方案...

install.packages("data.table")
library(data.table)

sample = as.data.table(sample)
sample[,x4:=ifelse(D==1,x2[D==0],x2[D==1])]
Run Code Online (Sandbox Code Playgroud)