비트 문자열이 포함 된 tibble 열에서 비트 연산을 수행해야합니다. 예를 들어, 난 (~ 50K 행) 특히 대형하지 않은 데이터 세트에서 작동하고문자열에 dplyr 친화적 인 비트 연산 R
# A tibble: 2 x 4
Id X1 X2 X1andX2
<int> <chr> <chr> <chr>
1 1 001 101 001
2 2 011 110 010
를 얻기 위해
ds <- tibble(Id=1:2, X1=c("001", "011"), X2=c("101", "110"))
mutate(ds, X1andX2 = magic.AND(X1,X2))
처럼 뭔가를 할 수 있도록하고 싶습니다하지만 난에이 이 작업을 여러 번 수행하십시오. 그래서 나는 다소 효율적이거나 단순한 것을 찾고 있습니다.
많은 조인과 그룹 작업을 실행해야하므로 dplyr와 호환되는 접근 방식을 선호합니다.
편집 : 세 개의 비트 문자열 (거의 작동 Sotos의 답변을 참조) 0으로 정수와 패딩으로 캐스팅 후 3 비트 스트링과 같이 결과를로 죄송합니다, 위의 예제는 매우 좋지 않다. 또한 긴 문자열 (32 비트 이상)에 대한 해결책을 찾는 것이 좋습니다. 여기에 더 좋은 예가 있습니다.
ds <- tibble(Id=1:2, X1=c("0101", "1110"), X2=c("1110", "0110"))
출력 내가 간단한 해결책을 포기
library(bitops)
ds$X1_X2 <- sprintf('%03d', bitAnd(ds$X1, ds$X2))
ds
# A tibble: 2 x 4
# Id X1 X2 X1_X2
# <int> <chr> <chr> <chr>
#1 1 001 101 001
#2 2 011 110 010
'001'과 '101'은 어떻게 '001'을 제공합니까? – Sotos
Element-wise, 즉 0 & 1 => 0, 0 & 0 => 0, 1 & 1 => 1 – rbrisk
퍼포먼스가 끝나면 확실한 첫 번째 질문은 비트를 문자열에 저장하는 이유입니다. 대신 비트 벡터 (= 정수)로 저장하고 진정한 비트 연산을 수행하십시오. –