Tôi muốn thay thế các giá trị trong một vector (x
) bằng các giá trị từ một véc tơ khác (y
). Bắt 22: Các phương thức cần phải linh động để chứa số "cấp độ" khác nhau trong vector x
. Ví dụ: xem xét vector x
thay thế các giá trị trong một vector dựa trên một vector khác
x <- sample(c(1, 2, 3, 4, 5), 100, replace = TRUE)
> x
[1] 2 4 1 1 3 1 1 1 1 1 2 2 5 5 4 5 5 3 4 1 2 2 3 3 3 5 1 3 4 5 5 3 2 4 3 1 3
[38] 1 4 5 4 1 4 5 4 5 2 4 2 5 3 4 3 1 2 1 1 5 1 4 2 2 5 2 2 4 5 2 4 5 2 5 4 1
[75] 3 3 4 4 1 1 4 4 2 4 5 4 5 5 4 2 5 2 4 5 3 2 1 1 2 2
nơi tôi muốn thay thế 1 bằng 100, 2 với 200 và cứ tiếp tục như vậy.
Điều này có thể được thực hiện dễ dàng với vòng lặp for nhưng đối với các vectơ lớn, vài nghìn giá trị, điều này là không hiệu quả. Bất kỳ mẹo nào để tối ưu hóa mã?
x <- sample(c(1, 2, 3, 4, 5), 100, replace = TRUE)
y <- c(100, 200, 300, 400, 500)
x.lvl <- c(1, 2, 3, 4, 5)
x.temp <- x
for (i in 1:length(y)) {
x.temp[which(x == x.lvl[i])] <- y[i]
}
Trong ví dụ đồ chơi thậm chí bạn có thể sử dụng y [x] –
Hoặc, chỉ cần x * 100 :) – VitoshKa
Perfect. Nó hoạt động ngay cả khi không chuyển đổi thành một yếu tố và phát hiện nếu x có nhiều "cấp độ" hơn so với dự kiến của y. –