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.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage