R을 사용하여 정보를 추출하는 데 필요한 많은 파일 이름 목록이 있습니다. 정보는 여러 개의 대시와 밑줄로 구분됩니다. 구분 기호 사이의 문자 수가 일치하지 않는다는 사실을 수용 할 수있는 방법을 찾는 데 어려움이 있습니다 (구분 기호가 사용되는 것처럼 정보의 순서는 일정하게 유지됩니다).
예를 들면 :
f <- data.frame(c("EI-SM4-AMW11_20160614_082800.wav", "PA-RF-A50_20160614_082800.wav"), stringsAsFactors = FALSE)
colnames(f)<-"filename"
f$area <- str_sub(f$filename, 1, 2)
f$rec <- str_sub(f$filename, 4, 6)
f$site <- str_sub(f$filename, 8, 12)
이로 인해 첫 번째 파일에는 올바른 결과가 생성되지만 두 번째 파일에는 잘못된 결과가 생성됩니다.
"stringr"및 "stringi"패키지를 사용해 보았고 값을 하드 코딩하는 것이 작동하지 않는다는 것을 알고 있으므로 다음과 같은 두 패키지를 사용하여 어색한 솔루션을 찾았습니다.
f$site <- str_sub(f$filename,
stri_locate_last(f$filename, fixed="-")[,1]+1,
stri_locate_first(f$filename, fixed="_")[,1]-1)
좀 더 우아하고 강력한 방법이 있어야한다고 생각합니다. 아마도 정규식을 포함하는 것 같습니다.
나는 다른 예를 살펴 보았다 ( R의 첫 번째 세미콜론까지 문자열의 추출 부분 () , R : 마지막 문자열에서 점 찾기 , 정규식을 사용하여 분할 문자열과 데이터 프레임으로 저장 ).
모든 제안 / 포인터는 대단히 감사하겠습니다.
`tidyr '패키지에서 이것을 시도하십시오 :
library(tidyr)
f %>% separate(filename, c('area', 'rec', 'site'), sep = '-')
다음과 같이 여러 구분 구분자로 나눌 수도 있습니다.
f %>% separate(filename, c('area', 'rec', 'site', 'date', 'don_know_what_this_is', 'file_extension'), sep = '-|_|\\.')
그런 다음 dplyr
의 select
함수를 사용하여 원하는 열만 유지하십시오 .
library(dplyr)
library(tidyr)
f %>%
separate(filename,
c('area', 'rec', 'site', 'date',
'don_know_what_this_is', 'file_extension'),
sep = '-|_|\\.') %>%
select(area, rec, site)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다