【发布时间】:2021-09-28 08:12:22
【问题描述】:
我有一个包含 3 个变量的数据框:
P1 P2 P3
2 12 8
2 1 6
2 7 8
NA NA 2
1 NA 6
NA 8 11
我需要根据以下条件计算另外5个新变量的值:
P1<-c(2,2,2,NA,1,NA)
P2<-c(12,1,7,NA,NA,8)
P3<-c(8,6,8,2,6,11)
df<-data.frame(P1,P2,P3)
attach(df)
X1<-X2<-X3<-X4<-X5<-c()
for(i in 1:(dim(df)[1])){
#X1
if((P3[i]==1||P3[i]==2||P3[i]==4||P3[i]==5||P3[i]==7||P3[i]==13) || ((P3[i]==3||P3[i]==6||P3[i]==8||P3[i]==12)&&(P1[i]==1))){X1[i]<-1
}else{X1[i]<-0}
#X2
if((P3[i]==3||P3[i]==6||P3[i]==8||P3[i]==11||P3[i]==12)&&
(P2[i]==1||P2[i]==2||P2[i]==3||P2[i]==5||P2[i]==6||P2[i]==7||P2[i]==10||P2[i]==11)){X2[i]<-1
}else{X2[i]<-0}
#X3
if(P3[i]==1||P3[i]==2||P3[i]==4||P3[i]==5||P3[i]==7||P3[i]==13){X3<-1
}else{X3[i]<-0}
#X4
if((P3[i]==3||P3[i]==6||P3[i]==8||P3[i]==12)&&(P1[i]==1)){X4<-1
}else{X4[i]<-0}
#X5
if((P3[i]==6||P3[i]==8||P3[i]==11) && (P2[i]=12||P2[i]==8)){X5[i]<-1
}else{X5[i]<-0}
}
df<-cbind(df,X1,X2,X3,X4,X5)
这是我想要的结果:
P1 P2 P3 X1 X2 X3 X4 X5
2 12 8 0 0 0 0 1
2 1 6 0 1 0 0 0
2 7 8 0 1 0 0 0
NA NA 2 1 0 1 0 0
1 NA 6 1 0 0 1 0
NA 8 11 0 0 0 0 1
但我没有得到它,而是得到以下错误:
if ((P3[i] == 3 || P3[i] == 6 || P3[i] == 8 || P3[i] == 11 || 中的错误: 需要 TRUE/FALSE 的缺失值
我知道我在使用 NA 时遇到问题,因为当我使用 NA 删除观察时,我没有收到该错误,但尽管我尝试了不同的方法,但我找不到任何解决方法。
另一方面,当我运行没有 NA 的行时,结果中有错误。
P1<-c( 2,2,2)
P2<-c(12,1,7) #rows without NA
P3<-c( 8,6,8)
P1 P2 P3 X1 X2 X3 X4 X5
2 12 8 0 0 0 0 1
2 1 6 0 1 0 0 1
2 7 8 0 1 0 0 1
我得到了上面的结果,而我应该得到这个:
P1 P2 P3 X1 X2 X3 X4 X5
2 12 8 0 0 0 0 1
2 1 6 0 1 0 0 0
2 7 8 0 1 0 0 0
有人可以帮我解决这个问题吗?
【问题讨论】:
标签: r dataframe if-statement na