Problem: Ich habe eine Reihe von Datenrahmen mit numerischen Spalten mit unterschiedlichen Spaltennamen. Die Spalten befinden sich jedes Mal an derselben Position. Der df MatA
hat die Spalten iBAQ.MatA.01
bis 30
, wenn der Datenrahmen YoungA
die Spalten iBAQ.YoungA.01
bis 30
hat. Ich möchte Spalte 11 durch Spalte 8 teilen. Sie sind immer in der gleichen Position, also MatA[9]
entspricht YoungA[9]
.So teilen Sie zwei Spalten mit Pipes und. (Punkt) Referenzen
Ich verwende dplyr
, um eine Reihe von Befehlen zu leiten, und wäre glücklich, wenn ich nicht viele Zeilen mit aktualisierten Variablennamen manuell bearbeiten müsste. Deshalb möchte ich .
verwenden, um den ursprünglichen Datenrahmen zu referenzieren. Dies führt jedoch zu einer falschen Ausgabe, wo viele identischen Spalten erstellt werden, wie in dem unten stehenden minimal Beispiel:
> library(dplyr)
> Data <- data.frame(
X = sample(1:10),
Y = sample(1:10)
)
> Data2 <- Data %>%
mutate(ratio = X/Y)
> Data3 <- Data %>%
mutate(ratio = Data$X/Data$Y)
> Data2, Data3
X Y ratio
1 8 1 8.0000000
2 1 6 0.1666667
3 5 10 0.5000000
4 3 8 0.3750000
5 2 3 0.6666667
6 10 4 2.5000000
7 6 9 0.6666667
8 7 5 1.4000000
9 9 7 1.2857143
10 4 2 2.0000000
Der Ausgang ist das, was ich will, aber dieser Ansatz erforderlich manuelle Anpassung der einzelnen Variablennamen für jeder neue Datenrahmen.
Probieren Sie andere Art zu teilen, aber referenzieren die Spalte nach Position, nicht ID funktioniert nur, wenn nicht in einer mutate
Funktion verwendet.
> Data[1]/Data[2]
X
1 8.0000000
2 0.1666667
3 0.5000000
4 0.3750000
5 0.6666667
6 2.5000000
7 0.6666667
8 1.4000000
9 1.2857143
10 2.0000000
> Data4 <- Data %>%
mutate(ratio = Data[1]/Data[2])
> Data5 <- Data %>%
mutate(ratio = .[1]/. [2])
> Data4, Data5
X Y ratio. ratio. ratio. ratio. ratio. ratio. ratio. ratio. ratio. ratio.
1 8 1 8.0000000 8.0000000 8.0000000 8.0000000 8.0000000 8.0000000 8.0000000 8.0000000 8.0000000 8.0000000
2 1 6 0.1666667 0.1666667 0.1666667 0.1666667 0.1666667 0.1666667 0.1666667 0.1666667 0.1666667 0.1666667
3 5 10 0.5000000 0.5000000 0.5000000 0.5000000 0.5000000 0.5000000 0.5000000 0.5000000 0.5000000 0.5000000
4 3 8 0.3750000 0.3750000 0.3750000 0.3750000 0.3750000 0.3750000 0.3750000 0.3750000 0.3750000 0.3750000
5 2 3 0.6666667 0.6666667 0.6666667 0.6666667 0.6666667 0.6666667 0.6666667 0.6666667 0.6666667 0.6666667
6 10 4 2.5000000 2.5000000 2.5000000 2.5000000 2.5000000 2.5000000 2.5000000 2.5000000 2.5000000 2.5000000
7 6 9 0.6666667 0.6666667 0.6666667 0.6666667 0.6666667 0.6666667 0.6666667 0.6666667 0.6666667 0.6666667
8 7 5 1.4000000 1.4000000 1.4000000 1.4000000 1.4000000 1.4000000 1.4000000 1.4000000 1.4000000 1.4000000
9 9 7 1.2857143 1.2857143 1.2857143 1.2857143 1.2857143 1.2857143 1.2857143 1.2857143 1.2857143 1.2857143
10 4 2 2.0000000 2.0000000 2.0000000 2.0000000 2.0000000 2.0000000 2.0000000 2.0000000 2.0000000 2.0000000
Mein Ziel ist es mit einer Nomenklatur wie für Daten5 zu beenden, da dies die leicht angepasst für verschiedene Datenrahmen mit identischem Layout aber anderen Variable und Datenrahmen Namen. Ich wäre auch glücklich über jede Idee, wie man diese einfache Unterteilung anders ausdrückt, damit sie nicht bricht.
Vielen Dank!
Sie sollten dieses Kapitel auf [Subsetting in R] (http://adv-r.had.co.nz/Subsetting.html) lesen. Die einzelne Klammer gibt einen einspaltigen Datenrahmen zurück, daher der Auswertungsfehler bei der Verwendung von Pipes. Wenn Ihnen die zusätzlichen Kommas in Ihrer Problemumgehung nicht gefallen, können Sie stattdessen immer doppelte Klammern verwenden, um auf Spalten zuzugreifen: 'Data%>% muate (Ratio =. [[1]] /. [[2]])' –
Vielen Dank Sie, das ist sehr wertvolle Eingabe. – Joram