Tôi vẫn đang học cách dịch mã SAS thành R và tôi nhận được cảnh báo. Tôi cần phải hiểu nơi tôi đang phạm sai lầm. Những gì tôi muốn làm là tạo ra một biến mà tóm tắt và phân biệt 3 trạng thái của một dân số: đại lục, ở nước ngoài, người nước ngoài. Tôi có một cơ sở dữ liệu với 2 biến:Tuyên bố ifelse lồng nhau
- id quốc tịch:
idnat
(Pháp, người nước ngoài),
Nếu idnat
là tiếng Pháp thì:
- id nơi sinh:
idbp
(đất liền, thuộc địa, ở nước ngoài)
Tôi muốn tóm tắt thông tin fro m idnat
và idbp
vào một biến mới gọi là idnat2
:
- status: k (đất liền, ở nước ngoài, người nước ngoài)
Tất cả các đề tài biến sử dụng "loại nhân vật".
Kết quả dự kiến trong cột idnat2:
idnat idbp idnat2
1 french mainland mainland
2 french colony overseas
3 french overseas overseas
4 foreign foreign foreign
Đây là mã SAS của tôi, tôi muốn dịch trong R:
if idnat = "french" then do;
if idbp in ("overseas","colony") then idnat2 = "overseas";
else idnat2 = "mainland";
end;
else idnat2 = "foreigner";
run;
Đây là nỗ lực của tôi trong R:
if(idnat=="french"){
idnat2 <- "mainland"
} else if(idbp=="overseas"|idbp=="colony"){
idnat2 <- "overseas"
} else {
idnat2 <- "foreigner"
}
tôi nhận được cảnh báo này:
Warning message:
In if (idnat=="french") { :
the condition has length > 1 and only the first element will be used
tôi được khuyên là nên sử dụng một "lồng nhau ifelse
" thay cho yên thân của mình nhưng có thêm cảnh báo:
idnat2 <- ifelse (idnat=="french", "mainland",
ifelse (idbp=="overseas"|idbp=="colony", "overseas")
)
else (idnat2 <- "foreigner")
Theo thông điệp cảnh báo độ dài lớn hơn 1 vì vậy chỉ có những gì giữa các dấu ngoặc đầu tiên sẽ được đưa vào tài khoản. Xin lỗi nhưng tôi không hiểu những gì chiều dài này đã làm với ở đây? Có ai biết tôi sai ở đâu không?
Bạn không nên trộn 'ifelse' và' else'. – Roland
@ Roland Bạn cảm ơn vì lời khuyên, tôi vừa mới đưa ra kết quả. Những gì tôi muốn là chỉ trong cột idnat2 nếu nó làm cho nó rõ ràng. @ KarlForner cảm ơn bạn đó chính xác là những gì tôi đang cố gắng làm với các ví dụ đơn giản tuy nhiên tôi đang thực sự đấu tranh với "R". Tôi đã cố gắng làm tương tự trên SPSS và nó đơn giản hơn. – balour
Điểm của tôi là SO không phải là sự thay thế cho việc học một ngôn ngữ. Có rất nhiều sách, hướng dẫn ... Bạn nên đăng ở đây khi bạn bị kẹt và bạn đã sử dụng tất cả các tài nguyên khác. Tốt. –