Hier ist ein Versuch, dies so vektorisiert wie möglich zu tun.
i1 <- names(unlist(l, TRUE, TRUE))
#[1] "a.a1" "a.a2" "a.a3" "a.b1" "a.b2" "a.b3" "a.c1" "a.c2" "a.c3" "b.a1" "b.a2" "b.a3" "b.b1" "b.b2" "b.b3" "b.c1" "b.c2" "b.c3" "c.a1" "c.a2" "c.a3" "c.b1" "c.b2" "c.b3" "c.c1" "c.c2" "c.c3"
i2 <- names(split(i1, gsub('\\d+', '', i1)))
#[1] "a.a" "a.b" "a.c" "b.a" "b.b" "b.c" "c.a" "c.b" "c.c"
Wir können jetzt i2
alles vor dem Punkt aufteilen , der geben wird,
split(i2, sub('\\..*', '', i2))
# $a
# [1] "a.a" "a.b" "a.c"
# $b
# [1] "b.a" "b.b" "b.c"
# $c
# [1] "c.a" "c.b" "c.c"
Um sie vollständig zu reinigen, müssen wir eine Schleife ausführen und einen einfachen regulären Ausdruck anwenden.
lapply(split(i2, sub('\\..*', '', i2)), function(i)sub('.*\\.', '', i))
was gibt,
$a
[1] "a" "b" "c"
$b
[1] "a" "b" "c"
$c
[1] "a" "b" "c"
Der Code wurde komprimiert
i1 <- names(unlist(l, TRUE, TRUE))
i2 <- names(split(i1, gsub('\\d+', '', i1)))
final_res <- lapply(split(i2, sub('\\..*', '', i2)), function(i)sub('.*\\.', '', i))
unlist()
am Ende hinzufügen , aber ich bin nicht sicher, ob dies das ist, was Sie wollen.Erstellen Sie zuerst l1, eine verschachtelte Liste mit nur den Spaltennamen
Dann liste l1 auf
quelle
Hier ist eine Möglichkeit,
purrr
Funktionenmap_depth
und zu verwendenvec_depth
quelle