สันนิษฐานว่าตามโต๊ะ:
data <- data.table(dummy=1:10)
ฉันรู้ว่าคุณสามารถทำได้ต่อไปนี้อย่าง:
data[dummy < 5, c("test1", "test2") := list("Yes", 1)]
และ:
data[, test1 := fcase(dummy < 5, "Yes")]
data[, test2 := fcase(dummy < 5, 1)]
ฉันกำลังพยายามรวมพวกนี้ไปหนึ่งเหมือนแล้ว:
data[, c("test1", "test2") := fcase(dummy < 5, list("Yes", 1))]
แต่มันทำให้ผมต่อไปนี้เกิดข้อผิดพลาด:
Error in fcase(dummy < 5, list("Yes", 1)) :
Length of output value #2 must either be 1 or length of logical condition.
ฉันต้องการให้ผ่านไปหลายตัวนักมันสมเหตุสมผลที่จะใช้ fcase
. ฉันสามารถเสมอรีสอร์ทต้องใช้แรกทางออกสำหรับแต่ละตัวกรองเหมือนแล้ว:
data[dummy < 5, c("test1", "test2") := list("Yes", 1)]
data[dummy > 7, c("test1", "test2") := list("No", 0)]
data[between(dummy, 5, 7), c("test1", "test2") := list("Maybe", NA)]
แต่ฉันสงสัยว่าถ้าไม่มีอะไรมากกว่าจะเป็นไปได้ นั่นคือทางออกขอสร้างบนโต๊ะนวนเกี่ยวกับการผสมแบบของ test1
แล้ว test2
และผนวกรวมโต๊ะนี้กับข้อมูลบนโต๊ะหลังจากทำการ fcase
สำหรับเดียว test1
เหมือนแล้ว:
tests <- data.table(test1 = c("Yes", "No", "Maybe"),
test2 = c(1, 0, NA))
data[, test1 := fcase(dummy < 5, "Yes",
dummy > 7, "No",
between(dummy, 5, 7), NA_character_)]
merge(data, tests, by = "test1", all.x = T, sort = F)
แต่นี่ดูเหมือนเสื่อมสภาพสำหรับผู้ใหญ่และก็ซับซ้อน datatable