가정은 다음과 같은 테이블:
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