2017-07-07 4 views
0

Ich möchte Daten zusammenzufassen und dynamische Spalten Spalten und Speicher in verschiedenen Datenrahmen zu erstellen:Umbenennen Variable und Datenrahmen iterativ mit R

Daten ist so etwas wie:

col1 col2 col3 
A  1  200 
B  1  300 
A  2  400 

k=c("A","B","C") 
for(i in k) 
    { 
    group_data <- group_by(data[data$col1==i,], col2) 
    summary_i<- summarize(group_data ,paste("var",k[i],sep="_") = n()) 
    } 

Erwartete Ausgabe:

Drei Datenrahmen mit dem Namen summary_A, summary_B, summary_C mit den Variablen var_A, var_B bzw. var_C.

+0

bitte 'data' liefern und genaues Ergebnis – HubertL

+1

erwartete Es ist wahrscheinlich, dass Sie wirklich nicht tun * * Diese wollen, weil es mit den Dingen sehr schwierig macht, zu arbeiten, in R. Einen Haufen verschiedener, ähnlich benannter Variablen herumliegen zu lassen macht keinen Spaß. Im Allgemeinen arbeiten Sie besser mit verwandten Sammlungen in Listen. Bessere Ideen hier: https://stackoverflow.com/questions/17499013/how-do-i-make-a-list-of-data-frames – MrFlick

+0

Können wir nicht Befehl zuweisen oder einfügen innerhalb zusammenfassen? –

Antwort

0

Wie von @MrFlick richtig angegeben, gibt es bessere Möglichkeiten, um Ihr Problem zu verwalten.
, ist hier jedenfalls eine Arbeitsversion des Codes:

data <- structure(list(col1 = structure(c(1L, 2L, 1L), .Label = c("A", 
"B"), class = "factor"), col2 = c(1L, 1L, 2L), col3 = c(200L, 
300L, 400L)), .Names = c("col1", "col2", "col3"), class = "data.frame", row.names = c(NA, 
-3L)) 

k=c("A","B","C") 
for (i in seq_along(k)) { 
    group_data <- group_by(data[data$col1==k[i],], col2) 
    vark <- paste('var',i,sep='_') 
    eval(parse(text=paste("summary_",i," <- summarize(group_data,", vark, " = n())",sep=""))) 
} 

print(summary_1) 
# A tibble: 2 x 2 
# col2 var_1 
# <int> <int> 
# 1  1  1 
# 2  2  1 

print(summary_2) 
# A tibble: 1 x 2 
# col2 var_2 
# <int> <int> 
# 1  1  1 

print(summary_3) 
# A tibble: 0 x 2 
# ... with 2 variables: col2 <int>, var_3 <int> 
Verwandte Themen