1 Làm cách nào để thay đổi tên cột bằng dcast?

câu hỏi được tạo ra tại Wed, May 8, 2019 12:00 AM

Tôi đang chuyển đổi dữ liệu của mình từ dài sang rộng. Một phần của dữ liệu là ngày. Vấn đề của tôi là tôi muốn có các tên khác. Nó được hình thành như ví dụ biến_1-1 và tôi muốn 1-1_variable.

df:

    SN specimen_isolate_no isolaat materiaal_lokatie alarmniveau afnamedatum
 1:  2                 1-1  STAPEP Bloedkweek  Bloed       0      2017-04-30
 2:  3                 1-1  KLEBOX      Bloedkweek         0      2018-12-30
 3:  3                 2-1  KLEBOX      Bloedkweek         0      2018-12-31

Tôi đã thử dcast từ data.table:

setDT(df) 
df.wide <- dcast(df, SN ~ specimen_isolate_no, value.var = c("materiaal_lokatie","afnamedatum", "isolaat", "alarmniveau" ))

Cho tôi kết quả sau:

colnames: 
[1] "SN"                    "materiaal_lokatie_1-1" "materiaal_lokatie_2-1" 
 "afnamedatum_1-1"            "afnamedatum_2-1"        "isolaat_1-1"          
      "isolaat_2-1"                  "alarmniveau_1-1"    "alarmniveau_2-1"       

Kết quả này là ổn, nhưng tôi thay vào đó là các tên được hình thành như specample_isolate_no_variable, ví dụ 1-1_alarmniveau.

Để đạt được điều này, tôi đã thử

molten <- melt(df, id.vars = c("SN", "specimen_isolate_no"))
dfmolton <- dcast(molten, SN ~ specimen_isolate_no + variable)

#and 

 df %>% 
     gather(key, value, -SN, -specimen_isolate_no) %>%  
     unite(new.col, c(specimen_isolate_no,key )) %>%   
     spread(new.col, value) 

Nhưng cả hai tùy chọn đều làm xáo trộn ngày của tôi và tôi không biết cách khắc phục điều đó.

 #colnames:
 [1] "SN"                    "1-1_isolaat"           "1-1_materiaal_lokatie" "1-1_alarmniveau"       "1-1_afnamedatum"       "2-1_isolaat"           "2-1_materiaal_lokatie" "2-1_alarmniveau"      "2-1_afnamedatum"   

dfmolten$`1-1_afnamedatum`
[1] "17286" "17895"

@MichaelChirico
2019-05-08 16: 50: 01Z
  • Tôi không nghĩ rằng hiện tại có thể thực hiện điều này trực tiếp với dcast. Bạn có thể sử dụng một hàm như setnames () để thay đổi tên cột sau khi sử dụng dcast (). Bạn nên bỏ một nhận xét về GitHub data.table, có thể họ sẽ thêm tính năng này trong bản cập nhật trong tương lai.
    2019-05-08 17: 22: 27Z
  • Ok, cảm ơn tất cả các bạn! :)
    2019-05-08 18: 15: 05Z
  • 1 Câu trả lời                              1                         

    Như Frank đã đề cập, có một yêu cầu tính năng nổi bật cho ... lưu ý phụ này: vui lòng thêm phản ứng vào FR bạn muốn, chúng tôi sử dụng điều này trong một chừng mực nào đó để điều khiển thời gian phát triển:

    https://github.com/Rdatitable/data.table/issues/3189

    Trong thời gian này, bạn chỉ có thể sử dụng setnames và một số biểu thức chính quy để thực hiện việc này:

    old = grep('SN', names(df.wide), value = TRUE, invert = TRUE, fixed = TRUE)
    new = sapply(strsplit(old, '_', fixed = TRUE), function(x) paste(rev(x), collapse = '_'))
    setnames(df.wide, old, new)
    
        
    2
    2019-05-09 04: 34: 16Z
    nguồn đặt đây