data.table進階技巧及範例 | R語言資料科學

目錄

    原始文章

    data.table進階技巧及範例 | R語言資料科學


    原始文章

    data.table進階技巧及範例 | R語言資料科學


    data.table是R語言的熱門套件,能夠快速處理大量資料,效率高於dplyr,且得利於語法結構的精巧設計,data.table更容易寫出版排整齊的程式。這篇文章會討論data.table的進階技巧,在Cheat Sheat上也不一定找得到。

    開始之前,記得先安裝dplyr和data.table套件並載入。

    install.packages('dplyr')
    install.packages('data.table')
    library('dplyr')
    library('data.table')

    .GRP – 為每個Group加上Index

    dt <- data.table(C1 = c("A", "B", "C", "B", "A"),
                     C2 = c(1, 2, 3, 2, 1))
    dt2 <- dt[, INDEX := .GRP, by = .(C1)]
       C1 C2 INDEX
    1:  A  1     1
    2:  B  2     2
    3:  C  3     3
    4:  B  2     2
    5:  A  1     1

    以row index及column index來subset

    dt <- data.table(C1 = 1:3,
                     C2 = 101:103,
                     C3 = 901:903)
    dt_row <- dt[1:2, ]
    dt_col <- dt[, 2:3]
    dt_row_col <- dt[1:2, 2:3]
    > dt_row
       C1  C2  C3
    1:  1 101 901
    2:  2 102 902
    > dt_col
        C2  C3
    1: 101 901
    2: 102 902
    3: 103 903
    > dt_row_col
        C2  C3
    1: 101 901
    2: 102 902

    將data.table物件轉換成Vector

    必須先轉成matrix,再轉成vector。

    dt <- data.table(C1 = 1:3,
                     C2 = 101:103,
                     C3 = 901:903)
    d2 <- dt %>% 
          as.matrix() %>%
          as.vector()
    > d2
    [1]   1   2   3 101 102 103 901 902 903

    用dcast轉置時,修改預設的欄位名稱

    dt <- data.table(C1 = c(1, 2, 3, 4),
                     C2 = c(2, 3, 4, 5),
                     C3 = c(1, 3, 5, 6),
                     C4 = c(1, 2, 4, 7))
    dt_dcast <- dcast(dt, C1 + C2 ~ paste0("NEW_", C3), value.var = c("C4"))
    > dt_dcast
       C1 C2 NEW_1 NEW_3 NEW_5 NEW_6
    1:  1  2     1    NA    NA    NA
    2:  2  3    NA     2    NA    NA
    3:  3  4    NA    NA     4    NA
    4:  4  5    NA    NA    NA     7



    推薦文章

    Aron

    搭載商業思維的資料科學家,工業設計系畢業,曾任職知名品牌行銷企劃。下班後寫機器學習模型,寫網站,也寫文章。興趣是把Side Project當成創業題目來玩,把人生當成遊戲破關。

    facebook telegram

    發佈留言

    • * 表示必填欄位
    • 您填寫的電子郵件不會被公開
    • 請確認您的電子郵件正確無誤,當您的留言收到新的回覆時,我們會寄送通知信件給您

    發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *