Tôi đang xử lý một DB với định dạng giờ như:Pad với số không dẫn đến độ rộng phổ biến
HOUR ID
1 2
10 4
5 6
20 6
Tôi muốn đặt một số không tính vào giá trị với 1 ký tự và lưu trữ chúng trong một cột mới có tên NHOUR, như:
NHOUR HOUR ID
01 1 2
10 10 4
05 5 6
20 20 6
cho đến bây giờ tôi đang phải vật lộn với một cái gì đó tương tự (tôi làm theo một số gợi ý đã được cung cấp cho ifelse trong diễn đàn):
DB$NHOUR<-with(DB,ifelse(nchar(HOUR,type="chars")==1),sprintf("%02d",HOUR),as.numeric(HOUR))
nhưng không thành công! R luôn báo cáo phần tử "có" không được chỉ định, v.v.
Như mọi khi, mọi lời khuyên đều được đánh giá cao!
Điều này có vẻ như bạn đang làm mọi thứ, quá phức tạp. Tại sao không chỉ 'sprintf ("% 02d ", DB $ HOUR)'? Toàn bộ điểm của hàm đó là nó có các số 0 đứng đầu với chiều dài là 2 ký tự. – joran
'sprintf' và' as.numeric' không nằm trong cuộc gọi 'ifelse' khi chúng cần; có một dấu ngoặc đơn đóng trước chúng. Ngoài ra, bạn đang trộn các loại trả về bên trong 'ifelse' sẽ dẫn đến loại quảng cáo mà bạn có thể không mong đợi. –
Cuối cùng, vì bạn tương đối mới ở đây và đã hỏi một số câu hỏi, tôi nghĩ sẽ hữu ích khi chỉ ra rằng khi câu trả lời giải quyết được vấn đề của bạn, rất hữu ích khi nhấp vào dấu kiểm bên cạnh. Điều này giúp cải thiện đáng kể giá trị của câu hỏi (và trang web) bằng cách đưa ra một dấu hiệu rõ ràng cho người dùng trong tương lai khi câu trả lời đã giải quyết được vấn đề của bạn. Tuy nhiên, hãy nhớ rằng bạn không bắt buộc phải chấp nhận câu trả lời; nó được đánh giá cao, nhưng nó luôn là lựa chọn của bạn. – joran