2017-09-03 4 views
-4

Ich bin auf der Suche nach einer CVS-Datei, die eine Matrix enthält, wo jede Zeile/Spalte Kombination eine bestimmte Rate hat. Siehe Beispiel:So erstellen Sie Datenrahmen aus einer Matrix

Ich möchte die Informationen als Datenrahmen lesen, wo ich jeden Wert mit einem Zeilen/Spalten-Faktor assoziiert haben mit $Year, $Age, $Rate. Siehe Beispiel:

Dank!

CS

Update: Vielen Dank für das Feedback, ich habe meine eigene Funktion geschrieben und scheint den Trick zu tun:

matrix2dataframe <- function(rowN,colN,Data) { 
    NRowRep = max(rowN)-min(rowN) 
    NColRep = max(colN)-min(colN) 

    tmp_Name = rep(as.character(Data[rowN[1],colN[1]]),times=NRowRep*NColRep) 
    tmp_Value =  as.numeric(as.matrix(Data[rowN[2]:max(rowN),colN[2]:max(colN)])) 
    tmp_Age =  rep(as.character(as.matrix(Data[rowN[2]:max(rowN),1])),times=NColRep) 
    tmp_DYear =  mapply(rep,x=as.character(as.matrix(Data[rowN[1],2:max(colN)])),times=NRowRep) 
    tmp_DYear = as.character(tmp_DYear) 
    #list(Cancer = tmp_Name,Rate = tmp_Value,Age = tmp_Age,DYear = tmp_DYear) 
    data.frame(Cancer = tmp_Name,Rate = tmp_Value,Age = tmp_Age,DYear =  tmp_DYear) 
} 
+0

Bitte geben Beispieldaten und/oder ein Bild der Daten. – www

+1

Sie können die Ausgabe von 'dput' für die beiden Beispiel data.frames anstelle von zwei Bildern angeben. Sehen Sie hier, wie Sie eine gute Frage stellen https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example – mt1022

+0

dies unterscheidet sich nicht wirklich von Ihrer anderen Frage https: // stackoverflow .com/questions/46019182/Import-Matrix-CSV-Daten-in-r-How-in-Daten konvertieren-in-Datenrahmen. Haben Sie sich einen der einführenden Handbücher angesehen, die dies abdecken? Wenn ja, können Sie zeigen, welchen Code Sie ausprobiert haben und wo Sie stecken bleiben. Danke – user20650

Antwort

0

Werfen Sie einen Blick auf diese:

df <- data.frame(age = c("15-99", "15-44"), "one_year" = c(76.3, 92.9), "five_year" = c(60.9, 82.8)) 
df 
    age one_year five_year 
1 15-99  76.3  60.9 
2 15-44  92.9  82.8 

library(tidyr) 
gather(df, year, rate, -age) 
    age  year rate 
1 15-99 one_year 76.3 
2 15-44 one_year 92.9 
3 15-99 five_year 60.9 
4 15-44 five_year 82.8 

Sollten Sie in der Tat eine Matrix haben, können Sie diese mit der Funktion data.frame() in einen Datenrahmen umwandeln. Schauen Sie sich ?data.frame an. Sollten die Altersgruppen rownames sein, sollten Sie die Zeilennamen mit df$age = row.names(df) in eine Spalte umwandeln.

2

einfach reshape

melt(df) 

    age variable value 
1 15-99 one_year 76.3 
2 15-44 one_year 92.9 
3 15-99 five_year 60.9 
4 15-44 five_year 82.8 
Verwandte Themen