2017-12-07 13 views
-2

그림에 표시된 것처럼 문자열 뒤에 숫자 "0"이 포함 된 단어의 기간을 계산하고 싶습니다 (작업하려는 문자가있는 단어 아래에 빨간색 점을 삽입했습니다). 와일드 카드와 같은 것이 있으므로이 문자열이 포함 된 단어로만 작업 할 수 있습니까?R을 사용하여 와일드 카드를 사용하여 문자열을 식별하는 방법은 무엇입니까?

enter image description here

+0

매트, SO! * 사용 가능한 * 데이터를 단지 이미지 대신 게시하는 경우 매우 유용합니다. 이것은 이미지를 포함 할 수 없다는 것을 의미하지는 않습니다 (예시적인 목적을 위해). 그러나 대표 샘플이 강조 표시, 복사, 붙여 넣기 및 재생할 때 우리가 좀 더 쉽게 사용할 수 있습니다. 둘째로, 당신의 묘사가 불분명하다; 문자열 뒤에 * "0"은 괜찮지 만 어떤 문자열입니까? 셋째, 무엇을 시도 했습니까? 이것은 정규 표현식에 가장 적합 할 수 있지만, 노력 수준을 나타내면 도움이됩니다. (이것은 write-my-code 서비스가 아닙니다.) 감사합니다! – r2evans

+0

재현 가능한 질문을 만드는 방법에 대한 참고 자료 : https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example 및 https://stackoverflow.com/help/ 맥브. – r2evans

답변

0

사용 : 당신이 당신의 검색 매개 변수에 의해 서브 세트 전체 데이터 집합을보고 싶다면

grep('0',resultado2$TextGridLabel) 

가하는 0과 행을 찾기 위해 바로 사용 괄호 :

resultado2[grep('0',resultado2$TextGridLabel),] 
+0

'TextGridLabel'에'S10XXXXXXX'가 있으면 제대로 작동하지 않을 것입니다 – useR

0

? regex에서 반환 한 도움말을 읽어야합니다. R에서 정규 표현식을 사용하는 것에 대한 요약을 제공합니다. 또한 정규 표현식을 사용할 수있는 다양한 함수를 참조 할 것입니다. 데이터가 위의 dataframe, 안양에 있다면

예를 들어, :

grep(x=df$TextGridLabel, pattern="^.*0.+$") 

는 아무것도로 시작하는 0을 포함하고 0 후 적어도 하나 개의 문자를 가진 모든 값의 인덱스를 반환합니다.

건배! filename 경기의 일부가 될 수 없습니다해야하는 경우

+0

'TextGridLabel'에'S10XXXXXXX'가 있으면 제대로 작동하지 않을 것입니다 – useR

+1

@useR 정규 표현식을 사용하는 전문가가 아닙니다. 하지만 귀하의 주장을 재현 할 수는 없습니다. 어떤 일이 일어날 지 알아 내려고 할 때 얻는 결과는 다음과 같습니다. '><-c ("S10XXXXXXXX", "D10W", "D111America") ' '> grep (a, pattern = "^. * 0. + $ ")' '[1] 1 2' ... 이것은 내가 기대하는 것이고 무엇이 요구되었는지를 믿습니다. – Nate

+0

OP의 질문이 완전히 명확하지 않기 때문에 그가 실제로 원했던 것에 대한 다른 해석이 있습니다. 나는''S10''가''S10'' 다음에''0''이 없으므로''S10XXXXXXXX''가 일치하지 않아야한다고 생각합니다. 만약 'S10'이 OP가 문자열 _ 뒤에 숫자 "0"을 나타내는 문자열이 아니라면 당신의 솔루션이 의도 한대로 작동한다는 것에 동의하지만 OP가 명확해질 때까지는 알 수 없습니다. – useR

0

, 하나는 일치에서 정규식을 방지하기 위해 filename 열을 활용할 수 있습니다 :

library(dplyr) 
library(purrr) 

df %>% 
    mutate(no_filename = map2_chr(filename, text, ~gsub(.x, '', .y))) %>% 
    filter(grepl("^0", no_filename)) %>% 
    select(-no_filename) 

결과 :

filename  text  value 
1  S2 S20XXXXX 0.2065314 
2  S3 S30XXXXX 0.8146400 
3  S4 S40XXXXX 0.8123895 
4  S6 S60XXXXX 0.1111354 
5  S7 S70XXXXX 0.1028646 
6  S9 S90XXXXX 0.1306957 
7  S9 S90XXXXX 0.3203732 
8  S10 S100XXXXX 0.1876911 

참고 :

S100XXXXX이 일치하며, 하지만 S101XXXXX

데이터 :

library(dplyr) 
df = data.frame(filename = rep(paste0('S', 1:10), each = 5)) 
set.seed(123) 
df = df %>% 
    mutate(text = paste0(filename, sample(c(0:5), 50, replace = TRUE), 
        paste(rep('X', 5), collapse = "")), 
     value = runif(50)) 
0

아래의 코드 작업을 수행하고 그것이 내가 필요한 기본적이다.

resultado2[grep('0',resultado2$TextGridLabel),] 

그러나, 나는 그런 TextGridLabel에서 S10XXXXXXX 같은 데이터를 피하기 위해 싶습니다. 새 사진이 내가 생각하는 것을 더 잘 보여주기 위해 원래 게시물을 편집했습니다.