R代碼|data.table包使用示例

2021-02-13 R語言
#################################
#時間:2020-07-29
################################
options(warn = -1)

# 加載data.table包
library(data.table)

# 數據導入
mt <- fread("https://raw.githubusercontent.com/selva86/datasets/master/mtcars.csv")
head(mt)
class(mt)

# 數據讀取性能對比分析
# Create a large .csv file
set.seed(100)
m <- data.frame(matrix(runif(10000000), nrow=1000000))
write.csv(m, 'm2.csv', row.names = F)
# Time taken by read.csv to import
system.time({m_df <- read.csv('m2.csv')})
# Time taken by fread to import
system.time({m_dt <- fread('m2.csv')})

# data.frame轉換為data.table
data("mtcars")
head(mtcars)
mtcars$carname <- rownames(mtcars)
mtcars_dt <- as.data.table(mtcars)
class(mtcars_dt)
mtcars_copy <- copy(mtcars)
setDT(mtcars_copy)
class(mtcars_copy)

# data.frame轉換為data.table
setDF(mtcars_copy)
class(mtcars_copy)


# 數據選擇操作
# dataframe syntax
mtcars[mtcars$cyl == 6 & mtcars$gear == 4, ]
# datatable syntax
mtcars_dt[cyl==6 & gear==4, ]
mtcars[, 1]
mtcars_dt[, 1]
mtcars_dt[, 1, with=F]
mtcars_dt[, mpg]

myvar <- "mpg"
mtcars_dt[, myvar, with=F]
columns <- c('mpg', 'cyl', 'disp')
mtcars_dt[, columns]

mtcars_dt[, columns, with=FALSE]

# syntax 1:
mtcars_dt[1:4, list(mpg, cyl, gear)]

# syntax 2: most used
mtcars_dt[, .(mpg, cyl, gear)]

# 刪除列
drop_cols <- c("mpg", "cyl", "gear")
mtcars_dt[, !drop_cols, with=FALSE]

# 列名重新命名
setnames(mtcars_dt, 'vs', 'engine_type')
colnames(mtcars_dt)

DT <- data.table(A=1:5)
DT[ , X := shift(A, 1, type="lag")]
DT[ , Y := shift(A, 1, type="lead")]

# Solution 1
aq_dt <- data.table(airquality)
aq_dt[!is.na(Ozone), .(Solar.R, Wind, Temp)]

# Solution 2
setDT(airquality)
airquality[!is.na(Ozone), .(Solar.R, Wind, Temp)]

# 增加新的列
# data.frame syntax (works on data.table)
mtcars_dt$cyl_gear <- mtcars_dt$cyl + mtcars_dt$gear

# data.table syntax
mtcars_dt[, cyl_gear2 := cyl + gear]

mtcars_dt[,  `:=`(cyl_gear3 = cyl * gear,
                  cyl_gear4 = cyl - gear)]
mtcars_dt

mtcars_dt[,  .(cyl_gear3 = cyl * gear,
               cyl_gear4 = cyl - gear)]

# 分組操作
mtcars_dt[, .(mean_mileage=mean(mpg)), by=.(cyl, gear)]
mtcars_dt[, .N, by=cyl]

dt1 <- mtcars_dt[, .(mean_mpg=mean(mpg),
                     mean_disp=mean(disp),
                     mean_wt=mean(wt),
                     mean_qsec=mean(qsec)), by=cyl]
output <- dt1[order(cyl), ]
output

output <- mtcars_dt[, .(mean_mpg=mean(mpg),
                        mean_disp=mean(disp),
                        mean_wt=mean(wt),
                        mean_qsec=mean(qsec)), by=cyl][order(cyl), ]

# data.table中使用函數
output <- mtcars_dt[, lapply(.SD, mean), by=cyl, .SDcols=c("mpg", "disp", "hp", "drat", "wt", "qsec")]
output

# 數據連接
dt1 <- mtcars_dt[5:25,.(carname, mpg, cyl)]
dt2 <- mtcars_dt[1:10, .(carname, gear)]
dt3 <- mtcars_dt[2:12, .(carname, disp)]
# Inner Join
merge(dt1, dt2, by='carname')
#> <returns 6 rows>

# Left Join
merge(dt1, dt2, by='carname', all.x = T)
#> <returns 21 rows>

# Outer Join
merge(dt1, dt2, by='carname', all = T)  
#> <returns 25 rows>

# 參考資料
# https://www.machinelearningplus.com/data-manipulation/datatable-in-r-complete-guide/

相關焦點

  • data.table包R包
    從今天開始,陸續推出一系列關於好用的R包的文章,歡迎各位數據人反饋、留言、投稿。data.table包是對R語言數據框Data.frame的擴展和延伸。data.table要做的事情?」data.table使用舉例要用data.table,首先要加載這個包,若是沒有安裝此包,那就先安裝再加載。if(!
  • R語言數據分析利器——data.table包
    簡介R語言data.table包是自帶包data.frame的升級版
  • R語言-data.table-數據處理
    data.table 包數據處理data.table 包數據處理前言基礎介紹基本格式i j by 使用讀取數據行篩選列篩選總結
  • R包table1創建網頁格式的描述性統計表Table 1
    注意,table1包使用了一個熟悉的公式接口,各變量之間用 + 分隔,條件符號 | 的右邊為分層變量,參數data指定使用的數據集。還有一種更簡單的方法來定製表內容,使用簡短的代碼語法而不是render函數。
  • R數據處理|data.table篇(一)
    data.table包是一個超高性能處理包,在數據處理上代碼異常簡潔,速度非常快。由於data.table的語法主要基於[],有些用法和基礎函數會不一致,所以沒有放在前面兩個專題中一起講,而是單獨拿出來講。在這個系列裡,我會詳細說明data.table和基礎函的差異,並系統地講解data.table包的用法。
  • R語言:data.table語句批量生成變量
    作者:村長,數據科學、指彈吉他及錄音工程愛好者,浙大金融學博士在讀,在data.table
  • R數據處理|data.table篇(三)
    本文為data.table包介紹最後一篇,前兩篇連結如下R數據處理|data.table篇(一) - 知乎專欄R數據處理|data.table篇(二) - 知乎專欄本文主要講解data.table包中一些比較不常用的函數,還有data.table包高效的深層原理。
  • R數據分析:tableone包的詳細使用介紹
    tableone是幫助我們快速生成文章中table1表格的一個包,通常來說一篇SCI文章的第一個表都會給出樣本的基線情況。
  • R語言學習筆記之——數據處理神器data.table
    )切片索引:subset——dplyr::select+filter聚合運算:aggregate——plyr::ddply+mutate——dplyr::group_by+summarize數據聯結:merge——plyr::join——dplyr::left/right/inner/outer_join數據塑型:plyr::melt/dcast——tidyr::gather/spread
  • 如何使用PHP處理CSV文件?(代碼示例)
    為了使用fgetcsv()函數,我們需要先用fopen()函數打開文件進行讀取,然後用fclose()函數關閉文件來結束代碼。在兩者之間,我們使用一個循環,分別解析CSV每一行。下面就來簡單介紹一下如何處理:1、用fopen()函數打開文件並進行閱讀:$h = fopen("filename.csv", "r");使用「r」模式打開文件並進行閱讀;變量$h會從文件中保存數據的處理。
  • 編程模板-R語言腳本寫作:最簡單的統計與繪圖,包安裝、命令行參數解析、文件讀取、表格和矢量圖輸出
    程序功能描述和分析思路每次寫腳本,一定要寫清楚程序的功能、實現的主要步驟,每個參數的詳細說明和使用示例。如果英語描述不方便理解,建議中英文全寫,方便自己和同行快速理解。千萬要認識寫清楚這些,現點養成好習慣,將來節省的時間會更多。2. 依賴關係檢查、安裝和加載R己有過萬的可用包,很少需要我們開發新功能。
  • 使用readr包高效讀取txt/csv格式文件
    使用基礎函數讀取txt/csv文件read.table()函數是通用函數,可以用來讀取數據,讀取後的數據在R中以數據框形式存在。# 使用read.table()函數讀取數據read.table(file,  # 要讀取的數據文件路徑           header = FALSE, # 是否設置第一行為列變量名稱           sep = "",  # 設置分隔符格式           dec = ".") # 設置小數點格式
  • Data.Table若干高級技巧【R package】
    其設計的主要目的是高效迅速的對大批量數據分組處理操作。 它通過高效內存操作,設置keys、快速分組,以及滾動時序的快速合併的技巧,使其達到令人驚訝的效率。data.table主要通過二元檢索法大大提高數據操作的效率,當然同時它也兼容適用於data.frame的向量檢索法。 本文編譯自Andrew Brooks總結的一些data.table的實用技巧。
  • 「R」data.table 包功能特性學習
    data.table包提供了一個加強版的data.frame。它運行效率極高,而且能夠處理適合內存的大數據集。它通過[ ]實現了一種自然的數據操作語法。語法格式:DT[i, j, by]釋義為對data.table對象DT,使用i選擇行,然後按照by計算j。
  • R Markdown 詳細使用指南(一)
    library(pacman)p_load(ggplot2,xtable)```同時,利用 p_load() 來加載 ggplot2 包以及 xtable 包,當然  %>% 的使用,除了直接調用 magrittr 包以外, tidyverse 或者是加載 dplyr 包時都可以使用 管道操作符。
  • 一個處理大量 EM50 數據的示例 (dtplyr+data.table 版本)
    先加載需要多次的包:1library(data.table)2library(dtplyr)3library(dplyr, warn.conflicts = FALSE)4library(stringr)5library(tidyr)6library(lubridate)然後是最重要的部分:
  • R語言|Survminer包繪製生存曲線
    在R中進行生存分析常用的包主要有survival包以及survminer包。•Survival 包提供了生存函數的建立,Cox模型的建立,以及比較分析。這個包也提供了基於基礎繪圖系統的生存曲線繪製。•Survminer包提供了基於ggplot2系統對於生存分析的可視化,使得生存分析具有更加美觀的圖形,以及自我定製方式。
  • R語言中的Pandas:50題搞定 data.table
    R語言:50題搞定 data.table 簡介 data.table 是 R 語言中用於處理表格數據的包,相當於 Python 語言的 pandas,是學習 R 語言數據分析與挖掘必備工具。接下來我們用 50 道題學習data.table 的各種技巧。
  • 差異分析、顯著性標記及統計作圖的自動實現R代碼示例
    或者更換為非參數的方法,這裡展示一個針對於非參數檢驗的方法示例,先執行Kruskal-Wallis檢驗比較整體差異,再執行Behrens-Fisher的非參數多重比較查看兩兩差異。本人的很多經驗學自《R語言實戰 第二版》,它的154頁有這一段話。因此,對於非參數的檢驗方法,我也是一直在使用wilcoxon檢驗+p值校正的方法,代替多重比較。
  • R包vegan的典範對應分析(CCA)
    與僅使用物種多度數據的CA相比,CCA可以結合多種環境變量一起分析,從而更好地反映群落與環境的關係。CCA的基本概念及其在群落分析中的應用,可參考前文。本篇以某16S擴增子測序所得細菌群落數據,簡介R包vegan的CCA過程。