मान निम्न तालिका:
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