Schnellste Methode zum Filtern des Inhalts einer data.frame-Listenspalte in R / Rcpp
Ich habe ein data.frame:
df <- structure(list(id = 1:3, vars = list("a", c("a", "b", "c"), c("b",
"c"))), .Names = c("id", "vars"), row.names = c(NA, -3L), class = "data.frame")
mit einer Listenspalte (jeweils mit einem Zeichenvektor):
> str(df)
'data.frame': 3 obs. of 2 variables:
$ id : int 1 2 3
$ vars:List of 3
..$ : chr "a"
..$ : chr "a" "b" "c"
..$ : chr "b" "c"
Ich möchte den data.frame nach @ filtesetdiff(vars,remove_this)
library(dplyr)
library(tidyr)
res <- df %>% mutate(vars = lapply(df$vars, setdiff, "a"))
was bringt mir das:
> res
id vars
1 1
2 2 b, c
3 3 b, c
Aber um das @ fallen zu lasscharacter(0)
Vars Ich muss etwas tun wie:
res %>% unnest(vars) # and then do the equivalent of nest(vars) again after...
Aktuelle Datensätze: 560K Zeilen und 3800K Zeilen mit 10 weiteren Spalten (zum Mitnehmen).(das ist ziemlich langsam, was zu Fragen führt ...)
Was ist der schnellste Weg, dies in @ zu tR
?Gibt es eindplyr
/ data.table
/ andere schnellere Methode?Wie mache ich das mitRcpp
? UPDATE / EXTENSION:kann die Spaltenänderung an Ort und Stelle vorgenommen werden, anstatt das @ zu kopierlapply(vars,setdiff(...
Ergebnis?
as ist der effizienteste Weg, um nach @ zu filtervars == character(0)
wenn esMus ein separater Schritt sein.