2017-07-18 2 views
0

Ich bin neu auf dieser Website so leid, wenn dieser Beitrag ist beschissen.Erstellen Sie eine neue Variable/Spalte in einem Datenrahmen mit einer bestimmten Qualität aus einem vorhandenen Datenrahmen

Ich arbeite von einer massiven Datei, so werde ich ein kleines Beispiel geben, wie es aussieht here.

In dieser Datei hat die Spalte "Platte" drei Werte: 1,2 und 3. Ich versuche, drei neue Spalten zu machen, wobei jede Spalte den Wert "Abs.530nm" für die bestimmte Zeile hat es enthält die entsprechende Plattennummer (ex trennen die Absorptionswerte von der Platte 1 in eine neue Spalte, usw.)

das ist, was ich zu tun versucht:

data.row$plate %<>% factor(levels = c("1","2","3")) 

data.row %>% 
group_by(box, plate) %>% 
diff.tr.1.2 <- subset(plate, name.start <-"1", drop=FALSE) %>% 


{.} ->data.tech 

ich habe diesen Fehler:

Error in subset(plate, name.start <- "1", drop = FALSE) : 
object 'plate' not found 

Gibt es eine Möglichkeit zu tun, was ich versuche zu tun?

+1

Sie verwenden 'base R' Syntax zusammen mit' dplyr'. Ich denke du brauchst 'data.row%>% group_by (box, plate = faktor (platte, levels = 1: 3))%>% filter (name.start == 1)' der 'subset'-teil ist nicht klar. Meintest du "name.start == 1"? – akrun

Antwort

0

Das Paket data.table ist sehr schnell für große Datensätze, und es ist sehr einfach zu Teilmengen wie Sie beschreiben.

Ich schlage vor, anstatt drei separate Abs.530nm Spalten zu erstellen, dass Sie einfach den Datenrahmen auf drei verschiedene Arten filtern, eine für jede Faktorstufe. Das ist eine viel sauberere Lösung als NA-Werte in einem „ABS.530nm Platte 1“ -Spalte Einführung

Datenrahmen Unter der Annahme df genannt

require(data.table) 
as.data.table(df) 

# plate == 1 is your "filter" selecting only rows where the plate is 1 
# by defines your grouping, in this case, by box, then by plate 

output <- df[plate ==1, by= .(box,plate)] 
Verwandte Themen