Tôi biết rằng hàm filter()
trong R tính trung bình di chuyển. Tôi muốn biết nếu tồn tại một hàm trả lại cho tôi phương sai chuyển động hoặc độ lệch chuẩn, để hiển thị nó trong một cốt truyện cạnh nhau với đầu ra của hàm filter()
.Phương sai di chuyển trong R
Trả lời
Xem xét sở thú gói. Ví dụ filter()
cho:
> filter(1:100, rep(1/3,3))
Time Series:
Start = 1
End = 100
Frequency = 1
[1] NA 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
[26] 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
[51] 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
[76] 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 NA
trong khi rollmean()
trong sở thú cho:
> rollmean(1:100, k = 3, na.pad = TRUE)
[1] NA 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
[26] 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
[51] 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
[76] 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 NA
mà là như nhau (đối với đường trung bình 3 điểm trong ví dụ này).
Trong khi sở thú không có rollsd()
hoặc rollvar()
nó có rollapply()
, mà làm việc như apply()
chức năng để áp dụng bất kỳ chức năng R để cửa sổ xác định.
> rollapply(1:100, width = 3, FUN = sd, na.pad = TRUE)
[1] NA 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
[26] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
[51] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
[76] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 NA
Warning message:
In rollapply.zoo(zoo(data), ...) : na.pad argument is deprecated
hoặc trên một cái gì đó thú vị hơn:
> rollapply(vec, width = 3, FUN = sd, na.pad = TRUE)
[1] NA 0.3655067 0.8472871 0.5660495 0.3491970 0.4732417 0.9236859
[8] 0.8075226 1.8725851 1.1930784 0.6329325 1.1412416 0.8430772 0.5808005
[15] 0.3838545 1.1738170 1.1655400 1.3241700 0.6876834 0.1534157 0.4858477
[22] 0.9843506 0.6002713 0.6897541 2.0619563 2.5675788 6.3522039 6.0066864
[29] 6.2618432 5.1704866 2.1360853 2.5602557 1.0408528 1.0316396 4.9441628
[36] 5.0319314 5.7589716 3.2425000 4.8788158 2.0847286 4.5199291 2.5323486
[43] 2.1987149 1.8393000 1.2278639 1.5998965 1.5341485 4.4287108 4.4159166
[50] 4.3224546 3.6959067 4.9826264 5.3134044 8.4084322 9.1249234 7.5506725
[57] 3.8499136 3.9680487 5.6362296 4.9124095 4.3452706 4.0227141 4.5867559
[64] 4.7350394 4.3203807 4.4506799 7.2759499 7.6536424 7.8487654 2.0905576
[71] 4.0056880 5.6209853 1.5551659 1.3615268 2.8469458 2.8323588 1.9848578
[78] 1.1201124 1.4248380 1.7802571 1.4281773 2.5481935 1.8554451 1.0925410
[85] 2.1823722 2.2788755 2.4205378 2.0733741 0.7462248 1.3873578 1.4265948
[92] 0.7212619 0.7425993 1.0696432 2.4520585 3.0555819 3.1000885 1.0945292
[99] 0.3726928 NA
Warning message:
In rollapply.zoo(zoo(data), ...) : na.pad argument is deprecated
Bạn có thể thoát khỏi cảnh báo bằng cách sử dụng các lập luận fill = NA
, như trong
> rollapply(vec, width = 3, FUN = sd, fill = NA)
rollapply
trong gói zoo
có chức năng tùy ý. Nó khác với filter
ở chỗ nó không bao gồm NA
s theo mặc định.
Điều đó đang được nói, mặc dù, không có nhiều ý nghĩa trong việc tải một gói cho một chức năng đó là rất đơn giản để cuộn mình (chơi chữ dự định).
Dưới đây là một trong đó là đúng liên kết:
my.rollapply <- function(vec, width, FUN)
sapply(seq_along(vec),
function(i) if (i < width) NA else FUN(vec[i:(i-width+1)]))
set.seed(1)
vec <- sample(1:50, 50)
my.rollapply(vec, 3, sd)
[1] NA NA 7.094599 12.124356 16.522712 18.502252 18.193405 7.234178 8.144528
[10] 14.468356 12.489996 3.055050 20.808652 19.467922 18.009257 18.248288 15.695010 7.505553
[19] 10.066446 11.846237 17.156146 6.557439 5.291503 23.629078 22.590558 21.197484 22.810816
[28] 24.433583 19.502137 16.165808 11.503623 12.288206 9.539392 13.051181 13.527749 19.974984
[37] 19.756855 17.616280 19.347696 18.248288 15.176737 6.082763 10.000000 10.016653 4.509250
[46] 2.645751 1.527525 5.291503 10.598742 6.557439
# rollapply output for comparison
rollapply(vec, width=3, sd, fill=NA, align='right')
[1] NA NA 7.094599 12.124356 16.522712 18.502252 18.193405 7.234178 8.144528
[10] 14.468356 12.489996 3.055050 20.808652 19.467922 18.009257 18.248288 15.695010 7.505553
[19] 10.066446 11.846237 17.156146 6.557439 5.291503 23.629078 22.590558 21.197484 22.810816
[28] 24.433583 19.502137 16.165808 11.503623 12.288206 9.539392 13.051181 13.527749 19.974984
[37] 19.756855 17.616280 19.347696 18.248288 15.176737 6.082763 10.000000 10.016653 4.509250
[46] 2.645751 1.527525 5.291503 10.598742 6.557439
+1 Hình minh họa đẹp về cách cuộn mã của riêng bạn. –
Điều này hoạt động rực rỡ, cảm ơn! – Contango
Gói TTR có runSD
số những người khác:
> library(TTR)
> ls("package:TTR", pattern="run*")
[1] "runCor" "runCov" "runMAD" "runMax" "runMean"
[6] "runMedian" "runMin" "runSD" "runSum" "runVar"
runSD
sẽ nhanh hơn nhiều so với rollapply
vì nó tránh thực hiện nhiều cuộc gọi chức năng R. Ví dụ:
rzoo <- function(x,n) rollapplyr(x, n, sd, fill=NA)
rttr <- function(x,n) runSD(x, n)
library(rbenchmark)
set.seed(21)
x <- rnorm(1e4)
all.equal(rzoo(x,250), rttr(x,250))
# [1] TRUE
benchmark(rzoo(x,250), rttr(x,250))[,1:6]
# test replications elapsed relative user.self sys.self
# 2 rttr(x, 250) 100 0.58 1.000 0.58 0.00
# 1 rzoo(x, 250) 100 54.53 94.017 53.85 0.06
- 1. Di chuyển thư viện R
- 2. Ma trận hiệp phương sai LARGE trong R
- 3. R, ma trận lọc dựa trên phương sai cắt
- 4. Tạo biến số tiền di chuyển trong R
- 5. Làm hình nền động android với di chuyển sai lệch
- 6. Có gì sai với as.numeric trong R?
- 7. hiệp phương sai trong C#
- 8. Di chuyển ra ngoài chức năng tối ưu của R
- 9. Di chuyển từ * phương thức này bằng phương pháp rvalue?
- 10. R: sao chép/di chuyển một môi trường khác
- 11. phương sai mô hình bảng tuyến tính khác biệt đầu tiên trong R và Stata
- 12. NET Hiệp phương sai
- 13. UICollectionView hiển thị các ô sai sau khi di chuyển - vấn đề dequeue?
- 14. t.belongs_to trong di chuyển
- 15. generics java hiệp phương sai
- 16. Subtract chuyển vectơ trong R
- 17. Di chuyển trung bình của ba giá trị trước đó trong R
- 18. Số tiền tích lũy, số trung bình di chuyển và SQL "theo" tương đương trong R
- 19. di chuyển R_X86_64_32 đối với biểu tượng địa phương 'lỗi
- 20. Di chuyển mô hình đường ray sau khi di chuyển
- 21. Có sai khi di chuyển kho từ máy chủ 1.5 đến 1.7 máy chủ không?
- 22. Di chuyển dọc Parallax
- 23. Di chuyển tệp trong Xcode
- 24. Di chuyển Div trong IE
- 25. Di chuyển tệp trong Vim
- 26. Hiệp phương sai chung và đối nghịch
- 27. Chuyển đúng/sai thành slideToggle()
- 28. Làm thế nào để sử dụng hàm princomp() trong R khi ma trận hiệp phương sai có số không?
- 29. Cách di chuyển tệp trong Python
- 30. inet_aton chuyển đổi 010.000.000.001 sai?
+1 để dành thời gian –
Cảm ơn bạn Gavin, tôi đoán đây là một câu hỏi bổ trợ, nhưng bạn có biết một giải pháp R cơ bản sử dụng 'ts' không? – Rhubarb
@Zhubarb nope, không phải là một chức năng duy nhất. Bạn có thể viết mã này ra khỏi các phần R cơ bản (như 'rollapply()'), nhưng không có gì đóng hộp * mà tôi biết * –