ข้อใดข้อหนึ่งต่อไปนี้จะลบคอลัมน์ออกfoo
จาก data.table df3
:
# Method 1 (and preferred as it takes 0.00s even on a 20GB data.table)
df3[,foo:=NULL]
df3[, c("foo","bar"):=NULL] # remove two columns
myVar = "foo"
df3[, (myVar):=NULL] # lookup myVar contents
# Method 2a -- A safe idiom for excluding (possibly multiple)
# columns matching a regex
df3[, grep("^foo$", colnames(df3)):=NULL]
# Method 2b -- An alternative to 2a, also "safe" in the sense described below
df3[, which(grepl("^foo$", colnames(df3))):=NULL]
data.tableยังสนับสนุนไวยากรณ์ต่อไปนี้:
## Method 3 (could then assign to df3,
df3[, !"foo"]
แม้ว่าถ้าคุณต้องการลบคอลัมน์"foo"
จากdf3
(แทนที่จะเป็นเพียงการพิมพ์มุมมองของdf3
คอลัมน์ลบ"foo"
) คุณต้องการใช้วิธีที่ 1 แทน
(โปรดทราบว่าหากคุณใช้วิธีการที่ขึ้นอยู่กับgrep()
หรือgrepl()
คุณจำเป็นต้องตั้งค่าpattern="^foo$"
มากกว่า"foo"
หากคุณไม่ต้องการให้คอลัมน์ที่มีชื่อเช่น"fool"
และ"buffoon"
(เช่นที่มีfoo
ชื่อเป็นสตริงย่อย) จะถูกจับคู่และลบออกด้วย)
ตัวเลือกที่ปลอดภัยน้อยลงปรับได้สำหรับการใช้งานแบบโต้ตอบ:
สำนวนที่สองถัดไปจะใช้งานได้ - หากdf3
มีการจับคู่คอลัมน์"foo"
- แต่จะล้มเหลวในลักษณะที่ไม่คาดคิดหากไม่มี ตัวอย่างเช่นหากคุณใช้คอลัมน์ใดคอลัมน์หนึ่งในการค้นหาคอลัมน์ที่ไม่มีอยู่"bar"
คุณจะพบกับ data. แถวศูนย์
เป็นผลให้พวกเขาเป็นจริงเหมาะที่สุดสำหรับการใช้งานแบบโต้ตอบที่หนึ่งอาจเช่นต้องการแสดง data.table ลบคอลัมน์ใด ๆ "foo"
ที่มีชื่อที่มีอักขระย่อย สำหรับจุดประสงค์ในการเขียนโปรแกรม (หรือถ้าคุณต้องการลบคอลัมน์ออกจากตัวจริงdf3
มากกว่าเดิม) วิธีที่ 1, 2a และ 2b เป็นตัวเลือกที่ดีที่สุด
# Method 4:
df3[, .SD, .SDcols = !patterns("^foo$")]
ในที่สุดก็มีวิธีการใช้with=FALSE
งานแม้ว่าdata.table
จะค่อยๆเคลื่อนออกห่างจากการใช้อาร์กิวเมนต์นี้ดังนั้นจึงเป็นเรื่องท้อใจที่คุณสามารถหลีกเลี่ยงได้ แสดงที่นี่เพื่อให้คุณรู้ว่ามีตัวเลือกอยู่ในกรณีที่คุณต้องการ:
# Method 5a (like Method 3)
df3[, !"foo", with=FALSE]
# Method 5b (like Method 4)
df3[, !grep("^foo$", names(df3)), with=FALSE]
# Method 5b (another like Method 4)
df3[, !grepl("^foo$", names(df3)), with=FALSE]
dt
แทนdf3
...