Aşağıdaki tabloyu varsayalım:
data <- data.table(dummy=1:10)
Aşağıdakileri yapabileceğinizi biliyorum.:
data[dummy < 5, c("test1", "test2") := list("Yes", 1)]
ve:
data[, test1 := fcase(dummy < 5, "Yes")]
data[, test2 := fcase(dummy < 5, 1)]
Bunları böyle bir araya getirmeye çalışıyorum:
data[, c("test1", "test2") := fcase(dummy < 5, list("Yes", 1))]
Ama bana şu hatayı veriyor:
Error in fcase(dummy < 5, list("Yes", 1)) :
Length of output value #2 must either be 1 or length of logical condition.
Birden fazla filtreden geçmem gerekiyor, bu yüzden kullanmak mantıklı fcase
. Her filtre için ilk çözümü her zaman böyle kullanmaya başvurabilirim:
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)]
ama daha olası bir şey olup olmadığını merak ediyorum. Her bir kombinasyonla bir tablo oluşturma çözümü de vardır test1
ve test2
ve bunu yaptıktan sonra bu tabloyu veri tablosuyla birleştirin. fcase
sadece için test1
öyle gibi:
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)
Ancak bu, büyük ve karmaşık bir veri tabanı için verimsiz görünüyor