2016-06-15 13 views
0

Ich bin ziemlich neu zu R (meistens SAS/STATA). Ich habe ein Dataset (Frame?) In R, an dem ich arbeite und muss nur Zeilen behalten, die = ein Wert in einer Liste von Werten ist. In SAS würde ich normalerweise etwas IN LISTE tun.Zeilen in R behalten, wenn Wert in einer Spalte = Wert in einer Liste

Dies ist der Code zu dem, was ich bisher getan hat, die nicht zu funktionieren scheint:

merged2<-merge(merged1, bpa4data, by="CASE_ID") 

keep<-c(745.0, 745.1, 745.2, 745.3, 745.4, 745.5, 745.6, 745.7, 745.8,  
745.9, 746.0, 746.1, 746.2, 746.3, 746.4,746.5, 746.6, 746.7, 746.8, 746.9, 
747.0, 747.1, 747.2, 747.3,747.4, 747.5, 747.6, 747.8, 747.9) 

merged2[Reduce(`|`, lapply(merged2[sapply(merged2, is.numeric)], bpa4 %in% 
keep)),] 

ich die folgende Fehlermeldung erhalten:

Fehler in Spiel (x, Tisch, nomatch = 0L): Objekt 'bpa4' nicht gefunden.

Jede Hilfe wäre willkommen. Ich fühle, dass ich den Code falsch verwende, da die Spalte bpa4 die Spalte ist, die einen entsprechenden Wert in meiner "keep" -Liste hätte.

DANKE!

+0

Dies kann ein Tippfehler sein. Haben Sie ein Objekt namens bpa4? Ich sehe bpa4data in Ihrer 'merge' Funktion. – lmo

+0

bpa4 ist der Spalten-/Variablenname. Das ist, wo ich die "keep" zu arbeiten brauche, d. H. Durch die Spalte schauen und nur Zeilen behalten, die = einen der Werte in "keep" haben. Entschuldigung für meinen groben Missbrauch von R lingo. – CharlieATX

+0

Sie möchten 'bpa4data $ bpa4' wenn bpa4 eine Variable von bpa4data ist. – lmo

Antwort

0

Warum nicht versuchen dplyr Paket filter() Funktion?

bpa4 = c(744.9, 745.0, 745.1) 
keep = c(745.0, 745.1) 
df = data.frame(bpa4) 

df 
#> bpa4 
#> 1 744.9 
#> 2 745.0 
#> 3 745.1 

dplyr::filter(df, bpa4 %in% keep) 
#> bpa4 
#> 1 745.0 
#> 2 745.1