您好我正在编写一个程序,它采用x和y坐标并计算力的方位角。我写了以下代码。
if(CID2$XPM != 0){
CID2$APVECAZI <- atan(CID2$YPM/CID2$XPM)*180/3.14159
}else if(CID2$XPM < 0){
CID2$APVECAZI <- CID2$APVECAZI + 180
}else if(CID2$XPM > 0 & CID2$YPM < 0){
CID2$APVECAZI <- CID2$APVECAZI + 360
}else if(CID2$XPM == 0 & CID2$YPM > 0){
CID2$ACVECAZI <- CID2$AVECAZI <- 90
}else if(CID2$XPM == 0 & CID2$YPM < 0){
CID2$APVECAZI <- CID2$AVEDCAZI270
}
我得到的错误如下:
Warning message:
In if (CID2$XPM != 0) { :
the condition has length > 1 and only the first element will be used
有谁知道如何纠正这个问题。我有SAS代码,这是基于工作没有问题,但在R我被卡住了。
SAS CODE是:
IF XPM NE 0 THEN APVECAZI=ATAN(YPM/XPM)*180/3.14159;
IF XPM LT 0 THEN APVECAZI=APVECAZI+180;
IF XPM GT 0 AND YPM LT 0 THEN APVECAZI=APVECAZI+360;
IF XPM=0 AND YPM GT 0 THEN APVECAZI=90;
IF XPM=0 AND YPM LT 0 THEN APVECAZI=270;
感谢您的帮助。
答案 0 :(得分:0)
您可以以嵌套方式在R中使用ifelse
语句。最后一次分配以NA
结束。
CID2$APVECAZI <- ifelse(CID2$XPM !=0, atan(CID2$YPM/CID2$XPM)*180/3.14159,
ifelse(CID2$XPM <0, CID2$APVECAZI+180,
ifelse(CID2$XPM > 0 & CID2$YMP < 0, CID2$APVECAZI+360,
ifelse(CID2$XPM == 0 & CID2$YPM > 0, 90,
ifelse(CID2$XPM == 0 & CID2$YPM < 0, 270, NA)))))
CID2
XPM YPM APVECAZI
1 0 2 NA
2 0 2 NA
3 0 45 NA
4 50 90 60.94545
5 60 275 77.69205
6 275 0 0.00000