2016-09-26 5 views
2

Ich versuche, meine Datentabelle mit einer ifselse-Anweisung zu unterteilen, aber ich bekomme nicht das Ergebnis, das ich gesucht habe.Erstellen neuer Datentabelle basierend auf ifelse auf alten Datentabelle

Meine erste Datentabelle sieht wie folgt aus:

head(Data_copy, n = 18) 

    Company  Date  DOW variable value Year Month End_of_Month 
1: ASXRI 1991-09-06 Friday  RI NA 1991 Sep   0 
2: ASXRI 1991-09-09 Monday  RI NA 1991 Sep   0 
3: ASXRI 1991-09-10 Tuesday  RI NA 1991 Sep   0 
4: ASXRI 1991-09-11 Wednesday  RI NA 1991 Sep   0 
5: ASXRI 1991-09-12 Thursday  RI NA 1991 Sep   0 
6: ASXRI 1991-09-13 Friday  RI NA 1991 Sep   0 
7: ASXRI 1991-09-16 Monday  RI NA 1991 Sep   0 
8: ASXRI 1991-09-17 Tuesday  RI NA 1991 Sep   0 
9: ASXRI 1991-09-18 Wednesday  RI NA 1991 Sep   0 
10: ASXRI 1991-09-19 Thursday  RI NA 1991 Sep   0 
11: ASXRI 1991-09-20 Friday  RI NA 1991 Sep   0 
12: ASXRI 1991-09-23 Monday  RI NA 1991 Sep   0 
13: ASXRI 1991-09-24 Tuesday  RI NA 1991 Sep   0 
14: ASXRI 1991-09-25 Wednesday  RI NA 1991 Sep   0 
15: ASXRI 1991-09-26 Thursday  RI NA 1991 Sep   0 
16: ASXRI 1991-09-27 Friday  RI NA 1991 Sep   0 
17: ASXRI 1991-09-30 Monday  RI NA 1991 Sep   1 
18: ASXRI 1991-10-01 Tuesday  RI NA 1991 Oct   0 

Dies ist 18 Zeilen aus 250.000.

Was ich will, ist diese Datentabelle auf einer ifelse Funktion basiert wie folgt aufgeteilt:

Data1 <- ifelse("Weekly" == "Weekly", Data_copy[End_of_Month ==1,], Data_copy) 

* Die „Weekly“ == „Weekly“ Bit verwendet später in einer Funktion werden wird.

Ich möchte, dass Data1 eine neue Datentabelle ist, die nur die Zeilen enthält, bei denen End_of_Month == 1 ist.

Wenn ich den obigen Code ausführen, finde ich, dass ich eine Liste der Firmennamen und das ist es.

Ich werde Ihnen zeigen, wie die Ausgabe wie folgt aussieht:

Data1[[1]] 
    [1] "ASXRI" "ASXRI" "ASXRI" "ASXRI" "ASXRI" "ASXRI" "ASXRI" "ASXRI" "ASXRI" "ASXRI" "ASXRI" 

Wenn ich nun weiter nach unten scrollen ich:

[1387] "AANRI" "AANRI" "AANRI" "AANRI" "AANRI" "AANRI" "APARI" "APARI" "APARI" "APARI" "APARI" 
[1398] "APARI" "APARI" "APARI" "APARI" "APARI" "APARI" "APARI" "APARI" "APARI" "APARI" "APARI" 

Jeder dieser Einträge nur einer der Firmennamen ist.

ich mein gewünschtes Ergebnis zu erhalten, wenn ich tue:

Data2 <- Data_copy[End_of_Month == 1, ] 

Company  Date  DOW variable value Year Month End_of_Month 
1: ASXRI 1991-09-30 Monday  RI NA 1991 Sep   1 
2: ASXRI 1991-10-31 Thursday  RI NA 1991 Oct   1 
3: ASXRI 1991-11-29 Friday  RI NA 1991 Nov   1 
4: ASXRI 1991-12-31 Tuesday  RI NA 1991 Dec   1 
5: ASXRI 1992-01-31 Friday  RI NA 1992 Jan   1 
6: ASXRI 1992-02-28 Friday  RI NA 1992 Feb   1 

Im Grunde mag ich würde Data2 replizieren, sondern eine ifelse Anweisung.

Hier die ersten 100 Zeilen:

dput(head(Data_copy, n = 100)) 
structure(list(Company = c("ASXRI", "ASXRI", "ASXRI", "ASXRI", 
"ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", 
"ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", 
"ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", 
"ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", 
"ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", 
"ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", 
"ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", 
"ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", 
"ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", 
"ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", 
"ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", 
"ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", 
"ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", 
"ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI"), Date = structure(c(7918, 
7921, 7922, 7923, 7924, 7925, 7928, 7929, 7930, 7931, 7932, 7935, 
7936, 7937, 7938, 7939, 7942, 7943, 7944, 7945, 7946, 7949, 7950, 
7951, 7952, 7953, 7956, 7957, 7958, 7959, 7960, 7963, 7964, 7965, 
7966, 7967, 7970, 7971, 7972, 7973, 7974, 7977, 7978, 7979, 7980, 
7981, 7984, 7985, 7986, 7987, 7988, 7991, 7992, 7993, 7994, 7995, 
7998, 7999, 8000, 8001, 8002, 8005, 8006, 8007, 8008, 8009, 8012, 
8013, 8014, 8015, 8016, 8019, 8020, 8021, 8022, 8023, 8026, 8027, 
8028, 8029, 8030, 8033, 8034, 8035, 8036, 8037, 8040, 8041, 8042, 
8043, 8044, 8047, 8048, 8049, 8050, 8051, 8054, 8055, 8056, 8057 
), class = "Date"), DOW = c("Friday", "Monday", "Tuesday", "Wednesday", 
"Thursday", "Friday", "Monday", "Tuesday", "Wednesday", "Thursday", 
"Friday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", 
"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Monday", 
"Tuesday", "Wednesday", "Thursday", "Friday", "Monday", "Tuesday", 
"Wednesday", "Thursday", "Friday", "Monday", "Tuesday", "Wednesday", 
"Thursday", "Friday", "Monday", "Tuesday", "Wednesday", "Thursday", 
"Friday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", 
"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Monday", 
"Tuesday", "Wednesday", "Thursday", "Friday", "Monday", "Tuesday", 
"Wednesday", "Thursday", "Friday", "Monday", "Tuesday", "Wednesday", 
"Thursday", "Friday", "Monday", "Tuesday", "Wednesday", "Thursday", 
"Friday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", 
"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Monday", 
"Tuesday", "Wednesday", "Thursday", "Friday", "Monday", "Tuesday", 
"Wednesday", "Thursday", "Friday", "Monday", "Tuesday", "Wednesday", 
"Thursday", "Friday", "Monday", "Tuesday", "Wednesday", "Thursday" 
), variable = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("RI", 
"VO", "MV", "TD", "ND"), class = "factor"), value = c(NA_real_, 
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
NA_real_), Year = c("1991", "1991", "1991", "1991", "1991", "1991", 
"1991", "1991", "1991", "1991", "1991", "1991", "1991", "1991", 
"1991", "1991", "1991", "1991", "1991", "1991", "1991", "1991", 
"1991", "1991", "1991", "1991", "1991", "1991", "1991", "1991", 
"1991", "1991", "1991", "1991", "1991", "1991", "1991", "1991", 
"1991", "1991", "1991", "1991", "1991", "1991", "1991", "1991", 
"1991", "1991", "1991", "1991", "1991", "1991", "1991", "1991", 
"1991", "1991", "1991", "1991", "1991", "1991", "1991", "1991", 
"1991", "1991", "1991", "1991", "1991", "1991", "1991", "1991", 
"1991", "1991", "1991", "1991", "1991", "1991", "1991", "1991", 
"1991", "1991", "1991", "1991", "1991", "1992", "1992", "1992", 
"1992", "1992", "1992", "1992", "1992", "1992", "1992", "1992", 
"1992", "1992", "1992", "1992", "1992", "1992"), Month = c("Sep", 
"Sep", "Sep", "Sep", "Sep", "Sep", "Sep", "Sep", "Sep", "Sep", 
"Sep", "Sep", "Sep", "Sep", "Sep", "Sep", "Sep", "Oct", "Oct", 
"Oct", "Oct", "Oct", "Oct", "Oct", "Oct", "Oct", "Oct", "Oct", 
"Oct", "Oct", "Oct", "Oct", "Oct", "Oct", "Oct", "Oct", "Oct", 
"Oct", "Oct", "Oct", "Nov", "Nov", "Nov", "Nov", "Nov", "Nov", 
"Nov", "Nov", "Nov", "Nov", "Nov", "Nov", "Nov", "Nov", "Nov", 
"Nov", "Nov", "Nov", "Nov", "Nov", "Nov", "Dec", "Dec", "Dec", 
"Dec", "Dec", "Dec", "Dec", "Dec", "Dec", "Dec", "Dec", "Dec", 
"Dec", "Dec", "Dec", "Dec", "Dec", "Dec", "Dec", "Dec", "Dec", 
"Dec", "Jan", "Jan", "Jan", "Jan", "Jan", "Jan", "Jan", "Jan", 
"Jan", "Jan", "Jan", "Jan", "Jan", "Jan", "Jan", "Jan", "Jan" 
), End_of_Month = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0)), .Names = c("Company", "Date", "DOW", "variable", "value", 
"Year", "Month", "End_of_Month"), class = c("data.table", "data.frame" 
), row.names = c(NA, -100L), .internal.selfref = <pointer: 0x00000000001f0788>) 
+0

Ich möchte Ihre ersten Daten replizieren. Tabelle – jangorecki

+0

@jangorecki Ich habe einige Daten hinzugefügt, wenn Sie es versuchen möchten. –

+0

Aus dem Weg zu gehen, 'ifelse' zu ​​verwenden, ist generell eine schlechte Idee. Trotz der netten Syntax der Funktion hat sie eine große Anzahl von Nachteilen und Einschränkungen, also bleibe ich beim Ansatz "Data_copy [End_of_Month == 1]". Vielleicht verpasse ich etwas, da du nicht gesagt hast, warum du 'ifelse' hier benutzen willst. – Frank

Antwort

2

Andere Benutzer haben darauf hingewiesen, dass ifelse für Ihre Zwecke ungeeignet ist. Es kann nützlich sein zu erklären, warum. Von ?ifelse, ifelse(test, yes, no) liefert einen

Vektor der gleichen Länge und die Attribute (einschließlich der Dimensionen und ‚‚class‘‘) als ‚Test‘ und die Datenwerte aus den Werten von ‚Ja‘ oder ‚nein‘

Mit anderen Worten, wenn Ihre test Vektorlänge 1 ist, ifelse(...) einen Vektor der Länge 1. Zum Beispiel zurückkehren,

> ifelse(TRUE, 1:3, 7:9) 
[1] 1 
> ifelse(c(TRUE, FALSE), 1:3, 7:9) 
[1] 1 8 

In Ihrem Fall

ifelse("Weekly" == "Weekly", Data_copy[End_of_Month ==1,], Data_copy) 

wird einen Vektor der Länge eins zurückgeben. Genauer gesagt, da der Test TRUE zurückgibt, gibt ifelse das erste Element von Ihrem yes Argument zurück; Da es sich um einen Datenrahmen (eine Art Liste) handelt, gibt ifelse das erste Element des Datenrahmens zurück, das die erste Spalte ist. Deshalb erhalten Sie eine Liste der Firmennamen.Wenn Sie wirklich die ifelse Konstruktion verwenden möchten, versuchen

ifelse("Weekly" == "Weekly", list(Data_copy[End_of_Month ==1,]), list(Data_copy)) 

obwohl wie andere gesagt haben, können Sie besser dran mit if {} else {} sein.

Verwandte Themen