Berikut adalah upaya untuk melakukan ini sebagai Vektor mungkin,
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"
Kita sekarang dapat membagi i2
segalanya sebelum titik, yang akan memberi,
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"
Untuk membersihkannya, kita perlu mengulang dan menerapkan regex sederhana,
lapply(split(i2, sub('\\..*', '', i2)), function(i)sub('.*\\.', '', i))
pemberian yang mana,
$a
[1] "a" "b" "c"
$b
[1] "a" "b" "c"
$c
[1] "a" "b" "c"
Kode dipadatkan
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()
di akhir, tetapi saya tidak yakin apakah ini yang Anda inginkan.Pertama-tama buat l1, daftar bersarang dengan hanya colnames
Kemudian hapus daftar l1
sumber
Berikut ini salah satu cara menggunakan
purrr
fungsimap_depth
danvec_depth
sumber