Standarisasi dan skala ulang setiap kolom dari setiap elemen dalam daftar

Saya memiliki daftar 5 kerangka data seperti:

mydf <- data.frame(x=c(1:5), y=c(21:25),z=rnorm(1:5), p=rnorm(2:6), f=rnorm(3:7))
mylist <- rep(list(mydf),5)
names(mylist) <-c("2006-01-01","2006-01-02","2006-01-03","2006-01-04","2006-01-05") 

Saya juga memiliki rumus 3 langkah dan potongan kode berikut yang saya kumpulkan:

masukkan deskripsi gambar di sini

Langkah 1 - kodenya sebagai berikut ini perlu dihitung untuk setiap baris kolom yang sama. jika x adalah elemen dari "z", "f" atau "p" maka:

z = x - mean(column))/sd(column)

2 - skala ulang skor z dari 0 menggunakan nilai dari langkah 1

rz = abs(min(z)) + z

3 - Skala ulang skor RZ dari langkah 2 sedemikian rupa sehingga berada di antara 0 dan 1

mrz = rz/max(rz)

Saya perlu menerapkan rumus ini ke kolom "z", "p", "f" saja juga objective_col <- colnames(mylist$'2006-01-05'[,3:5]) di setiap elemen mylist menggunakan apply , sapply, lapply atau jenis loop lainnya:

mungkin akan terlihat seperti:

lapply(mylist, FUN = function(x) .......)

Output harus dalam tata letak dan format yang sama dengan mydf semuanya disimpan di mylist2 <- list()

Saya akan terus memperbarui ini seiring kemajuan saya. Saya masih belajar cara menggunakan loop dan fungsi..Terima kasih kepada siapa pun yang dapat memberikan masukan.


person Alex Bădoi    schedule 24.08.2015    source sumber
comment
Bagaimana Anda mendefinisikan baris z, p, f? Yang saya lihat hanyalah kolom. Apakah Anda memiliki variabel lain yang mendefinisikan himpunan bagian ini atau ini hanya salah ketik?   -  person Alex W    schedule 25.08.2015
comment
itu salah ketik. pergi sekarang.   -  person Alex Bădoi    schedule 25.08.2015


Jawaban (1)


person    schedule
comment
Anda seharusnya dapat menggunakan lapply daripada apply(...,2,FUN) - person thelatemail; 25.08.2015
comment
tentu, keduanya berfungsi ... lapply(x[[c("z", "p", "f")]], function(y) ... seperti di atas - person Alex W; 25.08.2015
comment
saya juga melihat fungsi 'skala' sebelumnya. apakah itu mewakili persis (x-μ)/σ ? rumus tidak ditampilkan dalam dokumentasi jadi saya pikir saya akan mengambil rute yang lebih aman. Terima kasih atas bantuannya. tampak hebat. - person Alex Bădoi; 25.08.2015
comment
baiklah, secara teknis, \mu dan \sigma adalah parameter yang tidak diketahui. Jika Anda mengetahui nilainya (dari populasi), Anda dapat menggunakannya. scale() menggunakan MLE untuk \mu, \sigma (yaitu mean sampel dan deviasi standar sampel. - person Alex W; 25.08.2015
comment
@AlexBădoi - memberikan hasil yang sama - uji: all.equal(c(scale(1:10)),((1:10) - mean(1:10))/sd(1:10)) - person thelatemail; 25.08.2015
comment
@Alex - Anda sepertinya telah memasukkan 2 langkah terakhir ke dalam satu baris seperti return((y2 + abs(min(y2))) / max(y2)) . Y2 terakhir -› max(y2) apakah skalanya diubah dari 0 di kode Anda? Langkah terakhir rumus saya menggunakan Zvalues ​​yang diubah skalanya. apakah benar jika kita membaginya dengan ((max(y2)+min(y2)) ? - person Alex Bădoi; 25.08.2015
comment
sebenarnya ((max(y2)+min(y2)) hanya akan mengembalikan max dari y2 yang merupakan skor z dikurangi min. mungkin dibagi max(y2 + abs(min(y2))) - person Alex Bădoi; 25.08.2015
comment
@AlexBădoi Saya sarankan Anda menjalani langkah-langkah satu per satu untuk satu kolom. Akan berguna bagi Anda untuk mengembangkan intuisi agar dapat memahami apa yang dilakukan kode tanpa harus menjalankannya... begitulah cara mempelajarinya - person Alex W; 25.08.2015