兩個修改的話:
- 使用矢量
ifelse()
功能來生成新的列數據。
- 合併比較結果時,使用矢量化的
&
邏輯與運算符。
table <- data.frame(age4=seq(1,200,10));
table$newvar <- ifelse(table$age4>=2 & table$age4<=155,1,0);
table;
## age4 newvar
## 1 1 0
## 2 11 1
## 3 21 1
## 4 31 1
## 5 41 1
## 6 51 1
## 7 61 1
## 8 71 1
## 9 81 1
## 10 91 1
## 11 101 1
## 12 111 1
## 13 121 1
## 14 131 1
## 15 141 1
## 16 151 1
## 17 161 0
## 18 171 0
## 19 181 0
## 20 191 0
你的代碼是不工作的原因是因爲if
語句和&&
運營商沒有量化。 &&
運算符僅檢查每個操作數向量的第一個元素,並且僅返回表示這兩個輸入值的邏輯AND結果的一個元素向量。 if
語句始終期望其條件爲一個元素的向量,並在該元素爲true時執行if-branch,如果爲false則執行else-branch。
如果您使用的是多元素的向量作爲if
語句中的條件,你會得到一個警告:
if (c(T,F)) 1 else 0;
## [1] 1
## Warning message:
## In if (c(T, F)) 1 else 0 :
## the condition has length > 1 and only the first element will be used
但對於一些奇怪的原因,你不如果你用得到一個警告多元素向量作爲操作數&&
(或||
):
c(T,F) && c(T,F);
## [1] TRUE
這就是爲什麼你的代碼似乎成功(我指的是它沒有打印任何警告信息),但它實際上並沒有做到預期的目的。
R不是SAS(也不SPSS)。您需要學習基本教程並通過示例進行工作。如果你爲此目的使用的任何文本沒有解釋「if」和「ifelse」之間的差異,那麼你應該把它扔掉。 (此外,您使用「=」是錯誤的。) – 2015-04-02 20:26:05