문자열 부분 요소 Ax를 변경 한 후, 문자열의 매우 긴 벡터에서 아래에 설명 된대로이 문자열의 중복 색인을 찾으려합니다. 고려 :문자열 목록에서 모든 복제본에 대해 "쌍별"색인을 찾습니다.
D <- data.frame(string=c("A 4 B 15 C 7","A 13 B 17 C 7","A 3 Ax 1 B 15 C 7","A 12 Ax 1 B 17 C 7","A 24 B 15 C 4","A 32 B 13 C 10","A 12 Ax 1 B 24 D 1","A 12 Ax 1 B 24 D 1","A 13 B 24 D 1"))
# string
"A 4 B 15 C 7"
"A 13 B 17 C 7"
"A 3 Ax 1 B 15 C 7"
"A 12 Ax 1 B 17 C 7"
"A 24 B 15 C 4"
"A 32 B 13 C 10"
"A 12 Ax 1 B 24 D 1"
"A 12 Ax 1 B 24 D 1"
"A 13 B 24 D 1"
내가 지금의 도끼에 의해 모든을 높이고 도끼를 삭제, 그래서 중복이됩니다
l <- strsplit(as.character(D$string), ' ')
# check which list parts contain 'Ax'
i <- sapply(l, function(v) any(v == 'Ax'))
# for those that contain 'Ax' increase the second number with 1
# and remove the 'Ax 1' part
l[i] <- lapply(l[i], function(v) {
v[2] <- as.character(as.numeric(v[2]) + 1);
v[-c(which(v == 'Ax') + 0:1)]
})
# check which are duplicates
k<-data.frame(k=as.integer(duplicated(l)))
k1<-data.frame(k=as.integer(duplicated(l,fromLast = TRUE)))
여기 해결 : Finding isotopes of find corresponding string with two differences exactly predifined
그러나 어떻게 수를 원래 데이터 프레임의 어느 위치에서 지금 확인하십시오 D
Ax 값과 해당 A 값 사이에 중복 일치가 있습니까? 다음과 같이 내 생각은 : h
가 inds
원래 data.frame에서의 inds를 삽입하여 올바른 만약 내가 확인할 수 있습니다 D
h<-c(0,0,1,1,0,0,1,1,0)
inds <- lapply(1:length(h[h==1 & (k==1 | k1==1)]), function(x) which(paste0(l[h==1 & (k==1 | k1==1)], collapse = NULL) %in% as.vector(l[h==1 & (k==1 | k1==1)][x])))
inds<-unlist(inds)
inds:
1
2
3
3
의 도끼 (1) 또는하지 (0)의 행이 있는지 여부를 나타내는 경우 : 첫 번째 열은 값 및 해당 제 도끼 값이 또한
하지만을 갖는다
X<-data.frame(A=A[h==0 & (k==1 | k1==1),1][inds],Ax=A[h==1 & (k==1 | k1==1),1])
시간이 많이 걸리는 것이없는 것 항상 정확한 색인을 제공하고 inds
에 둘 이상의 일치 항목이있는 경우 더 이상 작동하지 않습니다.
누구나 개선하고/수정하고 여러 경기를 처리하는 방법을 알고 있습니까? 결국 inds
벡터 (또는 행에 여러 개의 일치하는 경우 목록으로), 그래서 내가 알고있는 (있는 경우 중복) 어떤 위치에서 내 A 문자열은 원래 데이터에있는 Ax 상대로 있습니다. 프레임 D
. A 문자열과 해당 Ax 문자열의 각 색인을 찾는 다른 방법도 환영합니다.
누군가 나를 도와 줄 수 있습니까?
고마워요.
답장을 보내 주셔서 감사합니다. 그러나 이것이 이것을 올바르게 이해함에 따라, 결국 이것은 값이 중복되지만 중복 쌍의 인덱스가 아닌 인덱스 만 제공합니다. A가 도끼를 가지고있는 곳?! – JmO
"중복 쌍의 색인" 이 모양의 결과는 무엇입니까? 이렇게? '[1] 3 4 7 8' – InfiniteFlashChess
다음과 같이 : "A 3 Ax 1 B 15 C 7"1 때문에 "A 4 B 15 C 7"; "A 13 B 17 C 7", "A 12 Ax 1 B 24 D 1"및 "A 12 Ax 1 B 24 D 1"3이기 때문에 "A 12 A 1 B 17 C 7" 1 "그래서 내 질문에 내 inds 벡터처럼 1 2 3 3. – JmO