2016-04-10 17 views
-2

Hilfe von jedem gesucht.R Erstellen von Variablen mit befriedigender Bedingung

Ich habe einen Haushaltsumfrage-Datensatz namens h2004 und möchte eine Variable erstellen, die gleich einer anderen Variable ist, die bestimmte Bedingungen erfüllt. Hier habe ich eine Probe von Beobachtungen gegeben.

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 

und ich versuchte, den folgenden Befehl ein:

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

und dies erzeugt falsche Ergebnisse in R, wie ich das richtige Ergebnis aus mit Stata kennen. In dem ursprünglichen Datensatz nimmt der obige Befehl selbst dann Werte von "teuer" an, wenn cq15<12, und ersetzt die Beobachtungen gegen cq15>=12 & cq15<=14.

Ich versuchte auch mit Filteroption von dplyr, die den Datenrahmen richtig Teilmenge, aber nicht wissen, wie man es auf spezifische Variable anwendet.

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

Ich glaube, mein subsetting (cq15>=12 & cq15<=14) falsch ist. Bitte um Rat. Danke

Antwort

0

Das Problem ist im Befehl. Wenn der Befehl ausgeführt wird, wird die folgende Warnmeldung ausgegeben:

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 

Der Grund dafür ist, dass der LHS dieses Befehls Elemente Bedingung H2004 $ CQ15> = 12 & H2004 $ CQ15 < = 14 erfüllt wählt während auf dem RHS der vollständige Vektor h2004 $ expense gegeben wird, was zu Längenfehlern führt.

Lösung:

> 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 

oder alternativ:

> 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

Vielen Dank. Das funktioniert perfekt. –

Verwandte Themen