2016-04-10 135 views
-2

幫助尋求任何人。R創建滿足條件的變量

我有一個家庭調查數據集名爲h2004,並希望創建一個變量等於另一個變量滿足某些條件。我在這裏提出了一個觀察樣本。

cq15  expen 
10  0.4616136 
10  1.538712 
11  2.308068 
11  0.384678 
12  2.576797822 
12  5.5393632 
13  5.4624276 
14  2.6158104 
14  20.157127 

,我嘗試下面的命令:

h2004$crops[h2004$cq15>=12 & h2004$cq15<=14]=h2004$expen 

,這會產生錯誤的結果在R作爲我知道,從使用的Stata正確的結果。在原始數據集中,上述命令即使在cq15<12處取值爲'費用',並將其替換爲cq15>=12 & cq15<=14

我也嘗試過使用dplyr的正確子集數據框的過濾器選項,但不知道如何將其應用於特定變量。

fil<- filter(h2004, cq15>=12 & cq15<=14)

我覺得我的子集(cq15>=12 & cq15<=14)是錯誤的。請指教。謝謝

回答

0

問題出在命令中。當執行命令時,發出以下警告消息:

Warning message: 
    In h2004$crops[h2004$cq15 >= 12 & h2004$cq15 <= 14] = h2004$expen : 
    number of items to replace is not a multiple of replacement length 

這樣做的原因是,該命令的LHS選擇滿足條件H2004 $ cq15> = 12 & H2004 $ cq15 < = 14元件而在RHS上,則給出完整的矢量h2004 $ expensive,導致長度不匹配。

解決方案:

> h2004$crops[h2004$cq15>=12 & h2004$cq15<=14]=h2004$expen[h2004$cq15>=12 & h2004$cq15<=14] 

> h2004 
    cq15  expen  crops 
1 10 0.4616136  NA 
2 10 1.5387120  NA 
3 11 2.3080680  NA 
4 11 0.3846780  NA 
5 12 2.5767978 2.576798 
6 12 5.5393632 5.539363 
7 13 5.4624276 5.462428 
8 14 2.6158104 2.615810 
9 14 20.1571270 20.157127 

或者:

> indices <- which(h2004$cq15>=12 & h2004$cq15<=14) 
> h2004$crops[indices] = h2004$expen[indices] 
> h2004 
    cq15  expen  crops 
1 10 0.4616136  NA 
2 10 1.5387120  NA 
3 11 2.3080680  NA 
4 11 0.3846780  NA 
5 12 2.5767978 2.576798 
6 12 5.5393632 5.539363 
7 13 5.4624276 5.462428 
8 14 2.6158104 2.615810 
9 14 20.1571270 20.157127 
+1

非常感謝。這工作完美。 –