คำถามติดแท็ก data.table

แพ็คเกจ R data.table เป็นส่วนขยายของ data.frame ที่สร้างขึ้นเพื่อการวิเคราะห์ข้อมูลในหน่วยความจำที่รวดเร็ว ใช้แท็ก dt สำหรับแพ็คเกจ DataTables ด้วย Shiny (DT)

3
data.table vs dplyr: คนหนึ่งทำสิ่งที่ดีไม่ได้หรือไม่ดี?
ภาพรวม ฉันค่อนข้างคุ้นเคยกับไม่มากด้วยdata.table dplyrฉันได้อ่านdplyrบทความสั้น ๆและตัวอย่างที่ผุดขึ้นมาบน SO และจนถึงตอนนี้ข้อสรุปของฉันก็คือ: data.tableและdplyrเทียบเคียงได้กับความเร็วยกเว้นเมื่อมีหลายกลุ่ม (เช่น> 10-100K) และในบางกรณี (ดูมาตรฐานด้านล่าง) dplyr มีไวยากรณ์ที่เข้าถึงได้มากขึ้น dplyr บทคัดย่อ (หรือจะ) ปฏิสัมพันธ์ DB ที่มีศักยภาพ มีความแตกต่างการทำงานเล็กน้อย (ดู "ตัวอย่าง / การใช้งาน" ด้านล่าง) ในใจของฉัน 2. ไม่ได้รับน้ำหนักมากเพราะฉันค่อนข้างคุ้นเคยกับมันdata.tableแต่ฉันเข้าใจว่าสำหรับผู้ใช้ที่เพิ่งเริ่มใช้ทั้งสองจะเป็นปัจจัยสำคัญ data.tableฉันต้องการที่จะหลีกเลี่ยงการโต้แย้งเกี่ยวกับการที่สามารถใช้งานง่ายมากขึ้นเป็นที่ไม่เกี่ยวข้องสำหรับคำถามที่เฉพาะเจาะจงของฉันถามจากมุมมองของคนที่คุ้นเคยกับ ฉันยังต้องการหลีกเลี่ยงการอภิปรายเกี่ยวกับวิธีการที่ "ใช้งานง่ายมากขึ้น" นำไปสู่การวิเคราะห์ที่รวดเร็วขึ้น (แน่นอนจริง แต่อีกครั้งไม่ใช่สิ่งที่ฉันสนใจมากที่สุดที่นี่) คำถาม สิ่งที่ฉันอยากรู้คือ: มีงานการวิเคราะห์ที่ง่ายกว่าในการเขียนโค้ดด้วยแพ็คเกจหนึ่งหรืออีกแพคเกจสำหรับผู้ที่คุ้นเคยกับแพ็คเกจ (เช่นการกดแป้นบางอย่างร่วมกับการใช้ระดับ esotericism ที่ต้องการ มีงานวิเคราะห์ที่ดำเนินการอย่างมีนัยสำคัญ (เช่นมากกว่า 2x) มีประสิทธิภาพมากกว่าในแพ็คเกจหนึ่งเทียบกับแพ็คเกจอื่น หนึ่งคำถามดังนั้นเมื่อเร็ว ๆ นี้มีฉันคิดเกี่ยวกับเรื่องนี้มากขึ้นอีกนิดเพราะจนถึงจุดที่ผมไม่คิดว่าจะมีมากเกินกว่าสิ่งที่ฉันสามารถทำได้ในdplyr data.tableนี่คือdplyrวิธีแก้ปัญหา (ข้อมูลเมื่อสิ้นสุด Q): …
758 r  data.table  dplyr 

8
คุณจะลบคอลัมน์ตามชื่อใน data.table ได้อย่างไร?
หากต้องการกำจัดคอลัมน์ชื่อ "foo" ใน a data.frameฉันสามารถทำได้: df <- df[-grep('foo', colnames(df))] อย่างไรก็ตามเมื่อdfถูกแปลงเป็นdata.tableวัตถุจะไม่มีวิธีเพียงแค่ลบคอลัมน์ ตัวอย่าง: df <- data.frame(id = 1:100, foo = rnorm(100)) df2 <- df[-grep('foo', colnames(df))] # works df3 <- data.table(df) df3[-grep('foo', colnames(df3))] แต่เมื่อมันถูกแปลงเป็นdata.tableวัตถุสิ่งนี้จะไม่ทำงานอีกต่อไป
196 r  data.table 

2
การทำความเข้าใจอย่างแน่นอนเมื่อ data.table เป็นการอ้างอิงถึง (เทียบกับสำเนา) data.table อื่น
ฉันมีปัญหาเล็ก ๆ น้อย ๆ data.tableในการทำความเข้าใจคุณสมบัติที่ผ่านโดยการอ้างอิงของ การดำเนินการบางอย่างดูเหมือนจะ 'ทำลาย' ข้อมูลอ้างอิงและฉันต้องการที่จะเข้าใจว่าเกิดอะไรขึ้น ในการสร้างdata.tableจากที่อื่นdata.table(ผ่าน<-จากนั้นอัปเดตตารางใหม่โดย:=ตารางเดิมจะถูกเปลี่ยนด้วยเช่นกันซึ่งเป็นไปตาม: ?data.table::copy และstackoverflow: แพ็คเกจการส่งผ่านข้อมูลอ้างอิงโดยผู้ปฏิบัติงาน นี่คือตัวอย่าง: library(data.table) DT <- data.table(a=c(1,2), b=c(11,12)) print(DT) # a b # [1,] 1 11 # [2,] 2 12 newDT <- DT # reference, not copy newDT[1, a := 100] # modify new DT print(DT) # DT is modified …

3
. SD ย่อมาจาก data.table ใน R
.SDดูมีประโยชน์ แต่ฉันไม่รู้จริงๆว่าฉันกำลังทำอะไรอยู่ มันหมายถึงอะไร ทำไมถึงมีช่วงเวลาก่อนหน้านี้ (หยุดเต็ม) จะเกิดอะไรขึ้นเมื่อฉันใช้งาน ฉันอ่านแล้ว: .SDเป็นdata.tableชุดย่อยของxข้อมูลสำหรับแต่ละกลุ่มยกเว้นคอลัมน์กลุ่ม มันสามารถใช้เมื่อจัดกลุ่มโดยi, เมื่อจัดกลุ่มโดยby, คีย์byและ _ad hoc_by นั่นหมายความว่าลูกสาวdata.tableมีความทรงจำในการปฏิบัติการครั้งต่อไปหรือไม่?
173 r  data.table 

4
ทำไมแพนด้าถึงถูกรวมเข้ากับไพ ธ อนเร็วกว่า data.table จึงถูกรวมใน R ในปี 2012?
ฉันเพิ่งเจอห้องสมุดแพนด้าสำหรับงูหลามซึ่งตามมาตรฐานนี้ทำการผสานในหน่วยความจำที่รวดเร็วมาก มันเร็วกว่าแพ็คเกจdata.tableใน R (ภาษาที่ฉันเลือกใช้ในการวิเคราะห์) เหตุใดpandasจึงเร็วกว่าdata.tableมาก เป็นเพราะความได้เปรียบทางด้านความเร็วของงูหลามมีมากกว่า R หรือมีข้อเสียบางอย่างที่ฉันไม่ทราบ? มีวิธีการรวมภายในและภายนอกdata.tableโดยไม่หันไปmerge(X, Y, all=FALSE)และmerge(X, Y, all=TRUE)? นี่คือรหัส Rและรหัส Python ที่ใช้ในการกำหนดมาตรฐานของแพ็คเกจต่างๆ
160 python  r  join  data.table  pandas 

8
รวม / สรุปตัวแปรหลายตัวต่อกลุ่ม (เช่นผลรวม, ค่าเฉลี่ย)
จากกรอบข้อมูลจะมีวิธีที่ง่ายต่อการรวม ( sum, mean, maxet c) ตัวแปรหลายคนพร้อมกัน? ด้านล่างเป็นข้อมูลตัวอย่างบางส่วน: library(lubridate) days = 365*2 date = seq(as.Date("2000-01-01"), length = days, by = "day") year = year(date) month = month(date) x1 = cumsum(rnorm(days, 0.05)) x2 = cumsum(rnorm(days, 0.05)) df1 = data.frame(date, year, month, x1, x2) ฉันต้องการรวมx1และx2ตัวแปรจากdf2data frame ตามปีและเดือนพร้อมกัน โค้ดต่อไปนี้จะรวมx1ตัวแปร แต่ก็เป็นไปได้ที่จะรวมx2ตัวแปรพร้อมกันหรือไม่ ### aggregate variables …

6
วิธีการลบแถวโดยการอ้างอิงใน data.table?
data.tableคำถามของฉันจะเกี่ยวข้องกับการที่ได้รับมอบหมายโดยอ้างอิงกับการคัดลอกใน ฉันต้องการทราบว่าใครสามารถลบแถวโดยการอ้างอิงคล้ายกับ DT[ , someCol := NULL] ฉันต้องการรู้เกี่ยวกับ DT[someRow := NULL, ] ฉันคิดว่ามันมีเหตุผลที่ดีที่ฟังก์ชั่นนี้ไม่มีอยู่ดังนั้นบางทีคุณอาจชี้ให้เห็นถึงทางเลือกที่ดีสำหรับวิธีการคัดลอกตามปกติดังนี้ โดยเฉพาะอย่างยิ่งไปกับชื่นชอบจากตัวอย่าง (data.table) DT = data.table(x = rep(c("a", "b", "c"), each = 3), y = c(1, 3, 6), v = 1:9) # x y v # [1,] a 1 1 # [2,] a 3 2 # [3,] a …
150 r  data.table 

10
วิธีที่เร็วที่สุดในการแทนที่ NAs ใน data.table ขนาดใหญ่
ฉันมีdata.tableขนาดใหญ่โดยมีค่าที่หายไปจำนวนมากกระจายอยู่ทั่วแถว ~ 200k และ 200 คอลัมน์ ฉันต้องการโค้ดค่า NA เหล่านั้นให้เป็นศูนย์อีกครั้งอย่างมีประสิทธิภาพที่สุด ฉันเห็นสองตัวเลือก: 1: แปลงเป็น data.frame และใช้บางสิ่งเช่นนี้ 2: คำสั่งการตั้งค่าย่อย data.table บางประเภท ฉันจะมีความสุขกับการแก้ปัญหาอย่างมีประสิทธิภาพของประเภท 1 การแปลง data.frame แล้วกลับไปที่ data.table จะไม่ใช้เวลานานเกินไป

5
เลือกหลายคอลัมน์ใน data.table ตามดัชนีตัวเลข
เราจะเลือกหลายคอลัมน์โดยใช้เวกเตอร์ของดัชนีตัวเลขของพวกเขา (ตำแหน่ง) ในได้data.tableอย่างไร? นี่คือวิธีที่เราจะทำกับdata.frame: df <- data.frame(a = 1, b = 2, c = 3) df[ , 2:3] # b c # 1 2 3
143 r  data.table 

17
แทนที่ NAs ด้วยค่า non-NA ล่าสุด
ใน data.frame (หรือ data.table) ฉันต้องการ "กรอกข้อมูล" NAs ด้วยค่าที่ไม่ใช่ NA ก่อนหน้านี้ที่ใกล้เคียงที่สุด ตัวอย่างง่ายๆการใช้เวกเตอร์ (แทน a data.frame) มีดังต่อไปนี้: > y <- c(NA, 2, 2, NA, NA, 3, NA, 4, NA, NA) ฉันต้องการฟังก์ชั่นfill.NAs()ที่ช่วยให้ฉันสร้างyyสิ่งนั้นได้: > yy [1] NA NA NA 2 2 2 2 3 3 3 4 4 ฉันจำเป็นต้องทำซ้ำการดำเนินการนี้สำหรับหลายคน (รวม ~ 1 Tb) data.frames …
141 r  data.table  zoo  r-faq 

2
ทำไม rbindlist จึง“ ดีกว่า” กว่า rbind
ฉันกำลังจะผ่านเอกสารdata.tableและสังเกตเห็นจากบางส่วนของการสนทนามากกว่าที่นี่ในดังนั้นที่ควรจะเป็นดีกว่าrbindlistrbind ผมอยากจะรู้ว่าทำไมเป็นrbindlistดีกว่าrbindและในสถานการณ์rbindlistจริงๆเก่งกว่าrbind? มีข้อได้เปรียบในแง่ของการใช้หน่วยความจำหรือไม่?
136 r  data.table  rbind  rbindlist 

2
กำหนดหลายคอลัมน์โดยใช้: = ใน data.table ตามกลุ่ม
วิธีที่ดีที่สุดในการกำหนดให้หลายคอลัมน์โดยใช้data.tableคืออะไร? ตัวอย่างเช่น: f <- function(x) {c("hi", "hello")} x <- data.table(id = 1:10) ฉันต้องการทำสิ่งนี้ (แน่นอนว่าไวยากรณ์นี้ไม่ถูกต้อง): x[ , (col1, col2) := f(), by = "id"] และเพื่อขยายนั้นฉันอาจมีหลายคอลัมน์ที่มีชื่อเก็บไว้ในตัวแปร (พูดcol_names) และฉันต้องการทำ: x[ , col_names := another_f(), by = "id", with = FALSE] อะไรคือวิธีที่ถูกต้องในการทำสิ่งนี้?

3
เรียงแถวใน data.table ตามลำดับที่ลดลงบนคีย์สตริง `order (-x, v)` ให้ข้อผิดพลาดบน data.table 1.9.4 หรือก่อนหน้า
สมมติว่าฉันมีสิ่งต่อไปนี้data.tableในR: library(data.table) DT = data.table(x=rep(c("b","a","c"),each=3), y=c(1,3,6), v=1:9) ฉันต้องการเรียงลำดับตามสองคอลัมน์ (พูดว่าคอลัมน์xและv) ฉันใช้สิ่งนี้: DT[order(x,v)] # sorts first by x then by v (both in ascending order) แต่ตอนนี้ฉันต้องการจัดเรียงตามx(ตามลำดับที่ลดลง) และมีรหัสต่อไปนี้: DT[order(-x)] #Error in -x : invalid argument to unary operator class(DT$x)=characterดังนั้นผมคิดว่าข้อผิดพลาดนี้เกิดจากความจริงที่ว่า คุณช่วยให้ข้อเสนอแนะเพื่อแก้ปัญหานี้ได้ไหม ฉันรู้ว่าฉันสามารถใช้ได้DT[order(x,decreasing=TRUE)]แต่ฉันต้องการทราบว่าไวยากรณ์เพื่อจัดเรียงตามหลายคอลัมน์โดยใช้ทั้งสองวิธี (ลดลงบ้างเพิ่มขึ้นบ้าง) ในเวลาเดียวกัน โปรดทราบว่าหากคุณใช้DT[order(-y,v)]ผลลัพธ์ก็โอเค แต่ถ้าคุณใช้DT[order(-x,v)]มีข้อผิดพลาด ดังนั้นคำถามของฉันคือ: จะแก้ไขข้อผิดพลาดนี้ได้อย่างไร?
125 r  string  sorting  data.table  key 

3
เหตุใด X [Y] การรวม data.tables จึงไม่อนุญาตให้รวมภายนอกแบบเต็มหรือการรวมด้านซ้าย
นี่เป็นคำถามเชิงปรัชญาเกี่ยวกับ data.table join syntax ฉันพบการใช้งาน data.tables มากขึ้นเรื่อย ๆ แต่ยังคงเรียนรู้ ... รูปแบบการเข้าร่วมX[Y]สำหรับ data.tables นั้นกระชับสะดวกและมีประสิทธิภาพ แต่เท่าที่ฉันบอกได้มันรองรับเฉพาะการรวมภายในและการรวมภายนอกที่ถูกต้องเท่านั้น ในการรับการรวมด้านซ้ายหรือแบบเต็มฉันต้องใช้merge: X[Y, nomatch = NA] - แถวทั้งหมดใน Y - การรวมภายนอกด้านขวา (ค่าเริ่มต้น) X[Y, nomatch = 0] - เฉพาะแถวที่มีการจับคู่ทั้ง X และ Y - การเข้าร่วมภายใน merge(X, Y, all = TRUE) - ทุกแถวจากทั้ง X และ Y - การรวมภายนอกแบบเต็ม merge(X, Y, …
123 r  join  data.table 

2
วิธีจัดลำดับคอลัมน์ data.table ใหม่ (โดยไม่ต้องคัดลอก)
ฉันต้องการเรียงลำดับคอลัมน์ในของฉันdata.table xโดยให้เวกเตอร์อักขระของชื่อคอลัมน์neworder: library(data.table) x <- data.table(a = 1:3, b = 3:1, c = runif(3)) neworder <- c("c", "b", "a") เห็นได้ชัดว่าฉันทำได้: x[ , neworder, with = FALSE] # or x[ , ..neworder] # c b a # 1: 0.8476623 3 1 # 2: 0.4787768 2 2 # 3: 0.3570803 1 3 …
118 r  data.table 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.