4

我对以下数据有一个非常琐碎的问题:

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

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

现在,我想创建一个x3具有与D=0when相关的值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

我尝试使用ifelse如下功能:

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

我收到以下错误:

logical(0)

我还尝试了以下方法:

sample.data$x3<-with(sample.data, ifelse(D==1,tail(x2,3),head(x2,3)))

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

logical(0)

知道这里发生了什么吗?

4

2 回答 2

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])]
于 2013-03-15T18:33:40.250 回答
4

您的命令中的逻辑是合理的,但是您错误地引用了数据框。您只需要在整个代码行中删除.data之后。sample所以这个命令会给你你需要的东西:

sample$x3<-with(sample,ifelse(D==1,x2[which(D==0)],x2[which(D==1)]))

然而,该代码仍然有点冗长。

正如@Arun 在评论中指出的那样,在选择x2要使用的值作为ifelse. 以下代码将为您提供相同的结果:

sample$x3<-with(sample,ifelse(D==1,x2[D==0],x2[D==1]))
于 2013-03-15T18:16:24.253 回答