Ich bin ein Newcomer zu dplyr
und habe folgende Frage. Meine hat data.frame
eine Spalte, die als eine Gruppierungsvariable dient. Einige Zeilen nicht gehören zu einer Gruppe, die Gruppierungsspalte ist NA
.dplyr muate(): Werte ignorieren, wenn Gruppe ist NA
Ich muss dem data.frame einige Spalten hinzufügen, die die dplyr
Funktion mutate
verwenden. Ich würde es vorziehen, dass dplyr
alle Zeilen ignoriert, in denen die Gruppierungsspalte NA
entspricht. Ich werde mit einem Beispiel illustrieren:
library(dplyr)
set.seed(2)
# Setting up some dummy data
df <- data.frame(
Group = factor(c(rep("A",3),rep(NA,3),rep("B",5),rep(NA,2))),
Value = abs(as.integer(rnorm(13)*10))
)
# Using mutate to calculate differences between values within the rows of a group
df <- df %>%
group_by(Group) %>%
mutate(Diff = Value-lead(Value))
df
# Source: local data frame [13 x 3]
# Groups: Group [3]
#
# Group Value Diff
# (fctr) (int) (int)
# 1 A 8 7
# 2 A 1 -14
# 3 A 15 NA
# 4 NA 11 11
# 5 NA 0 -1
# 6 NA 1 -8
# 7 B 7 5
# 8 B 2 -17
# 9 B 19 18
# 10 B 1 -3
# 11 B 4 NA
# 12 NA 9 6
# 13 NA 3 NA
Berechnung der Unterschiede zwischen den Reihen ohne Gruppe macht keinen Sinn und wird die Daten korrumpieren. Ich brauche diese Zeilen zu entfernen und haben so wie dies getan:
df$Diff[is.na(df$Group)] <- NA
Gibt es eine Möglichkeit den obigen Befehl in die dplyr-Kette mit%>% enthalten? Irgendwo in den Zeilen:
df <- df %>%
group_by(Group) %>%
mutate(Diff = Value-lead(Value)) %>%
filter(!is.na(Group))
Aber wo die Zeilen ohne eine Gruppe nicht alle zusammen entfernt werden? Oder noch besser, gibt es eine Möglichkeit, dplyr
Zeilen ohne eine Gruppe zu ignorieren?
Es gewünschtes Ergebnis wäre:
# Source: local data frame [13 x 3]
# Groups: Group [3]
#
# Group Value Diff
# (fctr) (int) (int)
# 1 A 8 7
# 2 A 1 -14
# 3 A 15 NA
# 4 NA 11 NA
# 5 NA 0 NA
# 6 NA 1 NA
# 7 B 7 5
# 8 B 2 -17
# 9 B 19 18
# 10 B 1 -3
# 11 B 4 NA
# 12 NA 9 NA
# 13 NA 3 NA
Übliche Nutzung ist 'NA_integer_' eine eingebaute Konstante, zu ihrer Information. – Frank
@Frank Entspricht genau der gleichen Sache: 'identisch (as.integer (NA), NA_integer_)' und ich bin mir nicht so sicher über das "übliche". – tchakravarty
Fair genug. Mit "gewöhnlich" meine ich nur den einzigen Weg, den ich je gesehen habe. – Frank