2017-09-18 3 views
0

Angenommen, ich habe einen Kalender artigen Datenrahmen in R:Extract Elemente aus data.frame durch den Index

df = data.frame(Sun = c("*","*","*","*","*","*","*","*","*","*"), 
      Mon= c("*","s","*","*","*","*","*","*","*","*"), 
      Tues = c("*","*","*","*","*","*","*","*","*","*"), 
      Wedn = c("*","*","*","*","*","*","*","*","*","*"), 
      Thur = c("*","*","*","*","*","*","*","*","*","*"), 
      Fri = c("*","*","*","*","*","*","*","*","*","*"), 
      Sat = c("*","*","*","*","e","*","*","*","*","*")) 

> df 
    Sun Mon Tues Wedn Thur Fri Sat 
1 * * * * * * * 
2 * s * * * * * 
3 * * * * * * * 
4 * * * * * * * 
5 * * * * * * e 
6 * * * * * * * 
7 * * * * * * * 
8 * * * * * * * 
9 * * * * * * * 
10 * * * * * * * 

Wir können diesen Kalender Index wie folgend:

df_index[1,1] = 1 
df_index[1,2] = 2 
. 
. 
. 
df_index[2,1] = 8 
df_index[2,2] = 9 

so weiter und so fort . Das heißt, df [1,1] ist der erste Tag und df [2,1] ist der achte Tag. (Und df_index [,] existiert nicht, nur um besser zu verstehen).

Was ich tun möchte, besteht darin, diesen Datenrahmen nach Index zu unterteilen. Zum Beispiel möchte ich vom 9. Tag bis 35. Tag extrahieren und einen neuen Datenrahmen erzeugen:

Sun Mon Tues Wedn Thur Fri Sat 
1 NA s * * * * * 
2 * * * * * * * 
3 * * * * * * * 
4 * * * * * * e 
+0

Willst du das nur tun: df [1: 5,1: 3]? –

+0

Ja .... Ich habe es ... Danke @Ben_its – skyindeer

Antwort

0

Eine Woche ist nichts anderes als 7 Tage, so die Wochennummer bekommen Sie müssen es nur teilen, indem 7. Nehmen der ceiling-Wert als Index und extrahierende Teilmenge sollte funktionieren!

> df[ceiling(9/7):ceiling(35/7),] 
    Sun Mon Tues Wedn Thur Fri Sat 
2 * s * * * * * 
3 * * * * * * * 
4 * * * * * * * 
5 * * * * * * e 
0

Sie den Datenrahmen vektorisieren können, so dass das erste Element dieses Vektors ist der erste Tag, usw.

> x = as.vector(t(df)) 
    > x 
    [1] "*" "*" "*" "*" "*" "*" "*" "*" "s" "*" "*" "*" "*" "*" "*" "*" "*" "*" "*" 
    [20] "*" "*" "*" "*" "*" "*" "*" "*" "*" "*" "*" "*" "*" "*" "*" "e" "*" "*" "*" 
    [39] "*" "*" "*" "*" "*" "*" "*" "*" "*" "*" "*" "*" "*" "*" "*" "*" "*" "*" "*" 
    [58] "*" "*" "*" "*" "*" "*" "*" "*" "*" "*" "*" "*" "*" 

Um die 9 bis 35 Tage erhalten Sie einfach tun

> x[9:35] 
[1] "s" "*" "*" "*" "*" "*" "*" "*" "*" "*" "*" "*" "*" "*" "*" "*" "*" "*" "*" 
[20] "*" "*" "*" "*" "*" "*" "*" "e" 

Sie können dies wieder in eine Matrix/Datenframe einfügen. Sie benötigen jedoch auch zuerst einen NA-Wert, da Sie den ersten Tag der Woche verpassen. Also sollte wohl mit Decke/Boden arbeiten und durch 7 dividieren, wie es die andere Antwort andeutet.

Verwandte Themen