>

숫자 값을 가진 두 개의 벡터가 있습니다. 와 같은

v1 <- c(1, 3, 4, 5, 6, 7, 8)
v2 <- c(54, 23, 12, 53, 7, 8)

특정 비용으로 한 벡터를 다른 벡터로 바꿔야하는삽입,삭제대체의 수를 계산하고 싶습니다. 작업 당c1c2c3별로 기본 패키지의adist함수가 문자열에 대해이 작업을 수행하지만 숫자와 동등한 기능에 대해서는 알지 못합니다.

각 숫자를 문자로 참조하는 것에 대해 생각했지만 2000 개 이상의 고유 번호가 있으므로 R에서 2000 개의 다른 문자를 얻는 방법을 알고 있다면 나에게도 해결책이 될 것입니다.

도움을 주셔서 감사합니다.


  • 답변 # 1

    정수 벡터는 UTF-32로 인코딩 된 단일 문자열로 볼 수 있습니다 (하나의 유니 코드 코드 포인트는 단일 32 비트 정수로 표시됨). intToUtf8 를 사용하여 이러한 벡터를 UTF-8로 변환하면 "일반적인"문자열을 얻을 수 있습니다. .

    intToUtf8(c(65, 97))
    ## [1] "Aa"
    
    
    그런데, adist  와이즈 비즈  어쨌든 기본적으로 입력에 (반전 op). 내부적으로 정수 벡터에 따라 결과를 계산합니다. 큰 해킹이 없습니다.

    이것이 해결책입니다.

    utf8ToInt
    
    

    적어도 모든 숫자가 0보다 크면 위의 코드가 작동해야합니다. R은 유니 코드 코드 포인트를 상당히 자유롭게 처리합니다 (사실 너무 자유롭지 만이 경우 승자가됩니다). 가능한 가장 큰 정수조차도 허용됩니다.

    adist(intToUtf8(c(1, 3, 4, 5, 6, 7, 8)), intToUtf8(c(54, 23, 12, 53, 7, 8)), counts=TRUE)
    ##      [,1]
    ## [1,]    5
    ## attr(,"counts")
    ## , , ins
    ## 
    ##      [,1]
    ## [1,]    0
    ## 
    ## , , del
    ## 
    ##      [,1]
    ## [1,]    1
    ## 
    ## , , sub
    ## 
    ##      [,1]
    ## [1,]    4
    ## 
    ## attr(,"trafos")
    ##      [,1]     
    ## [1,] "SSSSDMM"
    
    

    음수 값을 가진 벡터가있는 경우 어떻게 든 변환 할 수 있습니다 (예 : utf8ToInt(intToUtf8(c(2147483647))) ## 2147483647 와 함께 .

    삽입, 제거, 교체 비용이 다른 경우 x <- x-min(x)+1 를 확인하십시오  와이즈 비즈  논의. stringdist라는 패키지도 있으며 여기에는 다른 많은 문자열 메트릭이 포함되어 있습니다. 위의 계획도 작동해야합니다.

    adist's

  • 이전 Neo4j Cypher Profile 키워드 및 실행 계획 이해
  • 다음 .net - 디자인 타임에 다른 WinForm 컨트롤을 구독 할 수있는 C # 속성을 어떻게 만듭니 까?