2017-11-01 19 views
5

Tôi đã tìm kiếm một số ví dụ, nhưng tôi không tìm thấy bất kỳ giá trị nào được bật lọc & ngày của chúng.spread() khung dữ liệu dựa trên ID và giá trị trong một cột khác

Date <-c('3/13/2017 6:21', '3/20/2017 6:28','3/13/2017 6:22','3/20/2017 6:28',' 3/13/2017 6:23','3/20/2017 6:28','3/13/2017 6:24',' 3/20/2017 6:28', ' 3/24/2017 6:28') 
Enabled_value<-c(0,1,0,1,0,1,0,1,0) 
Helper<-c('39RTU1','39RTU1','39RTU2','39RTU2','39RTU2','39RTU3','39RTU3','39RTU4','39RTU4', '39RTU4') 

để trông giống như:

Helper  Date(Enabled Value =0)  Date (Enabled Value =1) 
39RTU1  3/13/2017 6:20   3/20/2017 6:28 
39RTU2  3/13/2017 6:21   3/20/2017 6:28 
39RTU3  3/13/2017 6:22   3/20/2017 6:28 
39RTU4  3/13/2017 6:24   3/20/2017 6:28 
39RTU4  3/24/2017 6:28 

Như bạn thấy, tôi có timestamps cho mỗi quan sát - mỗi hàng phải là một trường hợp (ví dụ chuyển từ Enabled_value 0-1, và nếu cuối cùng Enabled_value cho đơn vị = 0, cần có một dòng mới (xem 39RTU4 dưới đây).

tôi đã thực hiện việc mở rộng giảm tập dữ liệu này (từ 500k đến 2k hàng).

Tôi đang cố gắng sử dụng tidyrdplyr, nhưng spread của tôi vẫn tiếp tục chạy các lỗi.

> sorted_data1<-spread(sorted_data,Enabled_Value,Helper) 
Error: Duplicate identifiers for rows (1340, 1342) 
+0

Tôi nghĩ rằng câu hỏi này có liên quan đến https://stackoverflow.com/questions/47043098/transpose-columns-group-by-time-and-customer-id – markdly

Trả lời

3

Có vẻ như các hàng không được xác định duy nhất dựa trên cách bạn đang cố gắng trải rộng. Vì vậy, đầu tiên tính toán một chỉ mục của helper và giá trị được kích hoạt. (Lưu ý tôi đã thay đổi dữ liệu ví dụ của bạn một chút vì một trong số chúng có chiều dài là 10, trong khi hai số còn lại có chiều dài là 9).

Hy vọng điều này sẽ hữu ích. Xin vui lòng làm rõ thêm nếu đây không phải là những gì bạn muốn.

Date <-c('3/13/2017 6:21', '3/20/2017 6:28','3/13/2017 6:22','3/20/2017 6:28',' 3/13/2017 6:23','3/20/2017 6:28','3/13/2017 6:24',' 3/20/2017 6:28', ' 3/24/2017 6:28') 
Enabled_value<-c(0,1,0,1,0,1,0,1,0) 
Helper<-c('39RTU1','39RTU1','39RTU2','39RTU2','39RTU2','39RTU3','39RTU3','39RTU4','39RTU4') 

df <- tibble(Date, Enabled_value, Helper) 
df %>% 
    group_by(Helper, Enabled_value) %>% 
    mutate(count = 1:n()) %>% 
    spread(Enabled_value, Date) %>% 
    rename(Enabled_value_0 = `0`, 
     Enabled_value_1 = `1`) 

# A tibble: 5 x 4 
# Groups: Helper [4] 
    Helper count Enabled_value_0 Enabled_value_1 
* <chr> <int>   <chr>   <chr> 
1 39RTU1  1 3/13/2017 6:21 3/20/2017 6:28 
2 39RTU2  1 3/13/2017 6:22 3/20/2017 6:28 
3 39RTU2  2 3/13/2017 6:23   <NA> 
4 39RTU3  1 3/13/2017 6:24 3/20/2017 6:28 
5 39RTU4  1 3/24/2017 6:28 3/20/2017 6:28 
+0

nếu bạn thêm 'mutate_at (Enabled_value, như .character) 'ở đầu chuỗi đường ống của bạn, bạn lưu một dòng, một số rõ ràng và đổi tên thủ công –

+0

Tên cột sẽ chuyển ngay cả khi không có. Tôi chỉ làm đổi tên thủ công ở cuối để làm cho chúng phù hợp hơn (nếu không thì tên cột sẽ là '0' và' 1'). Tôi có thể cũng đã thêm một dòng trong biến thể tôi đã phải dán "Enabled_value_" cho mỗi chữ số trước khi lây lan. Tôi thực sự cảm thấy như đổi tên thủ công rõ ràng hơn trong trường hợp này nhưng chắc chắn hoặc là hoạt động. –

+0

oh phải xin lỗi, tôi đã nhận xét quá nhanh –

Các vấn đề liên quan