Lưu ý rằng tham số thứ ba (giá trị) trong các ví dụ được đưa ra ở trên: giá trị là hằng số (ví dụ: 'Z' hoặc c (20,30)).
Xác định thông số thứ ba sử dụng các giá trị từ chính khung dữ liệu có thể dẫn đến nhầm lẫn.
Ví dụ: với một khung dữ liệu đơn giản như thế này (sử dụng dplyr :: data_frame):
tmp <- data_frame(a=1:10, b=sample(LETTERS[24:26], 10, replace=T))
này sẽ tạo somthing như thế này:
a b
(int) (chr)
1 1 X
2 2 Y
3 3 Y
4 4 X
5 5 Z
..etc
Bây giờ giả sử bạn muốn muốn làm, là nhân các giá trị trong cột 'a' cho 2, nhưng chỉ ở nơi cột 'b' là "X". Suy nghĩ tức thì của tôi sẽ giống như sau:
with(tmp, replace(a, b=="X", a*2))
Điều đó sẽ không cung cấp kết quả mong muốn. Dấu * 2 sẽ được định nghĩa là một vector cố định chứ không phải là tham chiếu đến cột 'a'. Do đó, vectơ 'a * 2' sẽ là
[1] 2 4 6 8 10 12 14 16 18 20
khi bắt đầu hoạt động 'thay thế'. Do đó, hàng đầu tiên trong đó 'b' bằng "X", giá trị trong 'a' sẽ được đặt bởi 2. Lần thứ hai, nó sẽ được thay thế bằng 4, vv ... nó sẽ không được thay thế bằng hai lần -giá trị-of-a trong hàng cụ thể đó.
Nguồn
2016-01-22 13:32:41