Saya memiliki daftar 20. Dalam daftar 20 adalah daftar sekitar 200 saham yang diperingkat berdasarkan kapitalisasi pasar. Ada 20 daftar karena penyortiran dilakukan setiap enam bulan dari 2008 hingga 2018. Saya memilah saham menjadi 5 portofolio kapitalisasi pasar. Saya telah menulis kode menggunakan lapply yang mengekstrak persentil ke-20 saham berdasarkan kapitalisasi pasar dan membuat lima daftar berbeda. Masalah yang saya miliki adalah bahwa daftar baru tidak memiliki nama elemen. Karena setiap daftar adalah daftar daftar dengan daftar 20 dengan setiap daftar memiliki sekitar 50 bagian, saya tidak dapat menyebutkannya secara manual. Saya perlu cara untuk mencocokkan nilai di setiap daftar dengan daftar asli untuk mendapatkan nama. Nama-nama saham yang saya butuhkan; nama-nama awalnya adalah nama baris dari kerangka data. Atau, apakah ada metode yang lebih baik untuk lapply yang menyimpan nama? Saya telah memberikan contoh dengan daftar 2, yang memiliki daftar 100 bersarang dan menggambarkan masalah yang sama yang saya miliki.

z <- as.double(1:100)
x <- as.double(200:299)
a <- do.call(paste0, replicate(5, sample(LETTERS, 100, TRUE), FALSE))
b <- do.call(paste0, replicate(6, sample(LETTERS, 100, TRUE), FALSE))
z <- as.matrix(z)
x <- as.matrix(x)
rownames(z) <- a
rownames(x) <- b

mylist <- list(z, x)

portfolio_5 <- lapply(mylist, function(x) x[x <= quantile(x, 0.2)])

portfolio_4 <- lapply(mylist, function(x) x[x > quantile(x, 0.2) & x <= quantile(x, 0.4)])

portfolio_3 <- lapply(mylist, function(x) x[x > quantile(x, 0.4) & x <= quantile(x, 0.6)])

portfolio_2 <- lapply(mylist, function(x) x[x > quantile(x, 0.6) & x <= quantile(x, 0.8)])

portfolio_1 <- lapply(mylist, function(x) x[x > quantile(x, 0.8) & x <= quantile(x, 1)])

Kode di atas berfungsi tetapi Anda akan melihat bahwa nama elemen di setiap daftar telah dihapus. Ini adalah masalah yang sama yang saya miliki. Bagaimana cara melakukan hal di atas dan tetap menjaga nama ekuitas masing-masing?

1
Mr.Rlover 14 Agustus 2019, 08:31

1 menjawab

Jawaban Terbaik

Karena hanya satu kolom, kita membutuhkan drop = FALSE karena properti default ?Extract

x[i, j, ... , jatuhkan = BENAR]

drop - Untuk matriks dan array. Jika TRUE hasilnya dipaksakan ke dimensi serendah mungkin (lihat contoh)

list OP adalah list dari matriks kolom dengan nama baris Ketika indeks i tidak diberikan, matrix akan dipaksa ke vector karena merupakan vector dengan atribut dim. Jadi, tentukan indeks logis di i, biarkan j kosong (untuk memilih semua kolom) lalu tambahkan drop = FALSE

lapply(mylist, function(x) x[x <= quantile(x, 0.2),, drop = FALSE])
2
Community 20 Juni 2020, 09:12