I 2 verschiedene Datenrahmen folgendes Format haben:R - interactive subsetting von Zeilen durch den Vektor von Spaltenüberschriften
DF1 -
v1 v2 v3 v4 v5
a 1 2 +
b 5 2 + +
c 5 2 + +
d 4 3 + +
e 1 5 + +
f 3 5
g 4 2
h 3 1
i 5 5 + +
DF2 -
v1 v2 v3 v4
a 1 2 +
b 5 2 + +
c 5 2 +
d 4 3 +
e 1 5 +
f 3 5
g 4 2
h 3 1
i 5 5 +
Mein Skript gibt ein Streudiagramm von v1 & v2, aber zuerst entferne ich Zeilen, die haben mindestens ein "+" in v3-v4 oder v3-v5.
Meine Datenrahmen können größer sein mit mehr v1-v2-Paaren, aber haben immer entweder die v3-v4 oder v3-v5 Spalten mit "+". Ich passe den Code manuell an, um die zu plottenden Spalten und die zu entfernenden Zeilen anzugeben, abhängig vom DF-Format, an dem ich gerade arbeite.
Es funktioniert gut, aber ich wollte das Skript interaktiv machen, wie folgt:
# Select v3-v4 or v3-v5 via interactive gui to give vector of column headers.
remove.vars.vector <- select.list(names(DF), # Select columns as vector of column header names via interactive gui.
multiple = TRUE, # Can choose multiple columns.
title = "Choose variables to remove from data set", # Title on gui.
graphics = TRUE) # Allow launch of gui.
# Return columns from DF with this vector of column headers.
remove.vars.subset <- DF[remove.vars.vector]
# Return rows that have at least one "+" in v3-v4 or v3-v5.
remove.vars.subset.+ <- subset(DF, remove.vars.subset == "+")
# Removes all rows that contain >=1 NA.
complete.data.+ <- remove.vars.subset.+[complete.cases(remove.vars.subset.+), ]
# Combine by rows "complete.data.+" with DF.
combo.list <- rbind(DF,complete.data.+)
# Remove duplicate rows from combined data frame.
complete.data <- combo.list[!duplicated(combo.list, fromLast = FALSE) & !duplicated(combo.list, fromLast = TRUE),]
Problem: Der obige Code, die mindestens ein „+ enthält nicht vollständig den Datenrahmen von Zeilen Streifen "in v3-4 oder v3-5. Das Problem scheint diese Zeilen zu sein:
# Return rows that have at least one "+" in v3-v4 or v3-v5.
remove.vars.subset.+ <- subset(DF, remove.vars.subset == "+")
ich auch eine Reihe von Zeilen am Ende mit nur NA erhalten daher in jeder Zelle in der nächsten Zeile Code complete.cases.
Der letzte Datenrahmen enthält daher noch einige Zeilen mit "+" in v3-4 oder v3-5.
Frage:
Gibt es eine bessere Art und Weise Zeilen in einem Datenrahmen der Teilmenge einen Vektor von Spaltenüberschriften verwenden, die „+“ in ihren Reihen enthalten?
Vielen Dank im Voraus.
BEARBEITEN - 09/08/2016 - 18:54 Ich habe gerade etwas bemerkt, dass ich nicht über meine Datenrahmen geklärt habe. Einige der Zeilen haben in v3-v4 oder v3-v5 kein "+". Dies sind die Zeilen, die ich letztendlich behalten möchte, damit ich die Streuung darstellen kann. Ich habe Datenrahmen entsprechend bearbeitet. Ich schaue nur auf Antworten, um sie zu verstehen. Ich bin noch ziemlich neu in R.
Ich habe versucht, Ihren Vorschlag und es hat perfekt funktioniert. Sie haben richtigerweise vermutet, dass einige Zeilen kein "+" hätten (Ich habe meinen Beitrag bearbeitet, bevor ich Ihren Vorschlag ausprobiert habe). Apply Familie von Funktionen hat sich an die Spitze meiner Liste für Dinge in R zu erkunden. Vielen Dank für die schnelle Antwort. –
PS: Ich verifizierte, indem ich meinen ursprünglichen Methodendatenrahmen an den mit dem Änderungsantrag erstellten Datensatz anbinde, und entfernte dann doppelte Zeilen. Antwort war Datenrahmen ohne Zeilen .... genial. Mein Gehirn nimmt langsam die R-Programmierlogik auf! –