반응형
목록에있는 모든 요소의 두 번째 하위 요소를 가져 오는 방법
이전에이 문제를 겪어 본 적이 있지만 지금은 약간의 정신적 장애가 있습니다. 그래서 찾을 수 없으니 여기에 게시해서 다음에 찾을 수 있도록하겠습니다.
ID 레이블을 나타내는 필드가 포함 된 데이터 프레임이 있습니다. 이 레이블에는 알파 접두사와 숫자 접미사의 두 부분이 있습니다. 나는 그것을 분리하고 이러한 값을 가진 두 개의 새 필드를 만들고 싶습니다.
structure(list(lab = c("N00", "N01", "N02", "B00", "B01", "B02",
"Z21", "BA01", "NA03")), .Names = "lab", row.names = c(NA, -9L
), class = "data.frame")
df$pre<-strsplit(df$lab, "[0-9]+")
df$suf<-strsplit(df$lab, "[A-Z]+")
주는
lab pre suf 1 N00 N , 00 2 N01 N , 01 3 N02 N , 02 4 B00 B , 00 5 B01 B , 01 6 B02 B , 02 7 Z21 Z , 21 8 BA01 BA , 01 9 NA03 NA , 03
따라서 첫 번째 strsplit은 잘 작동하지만 두 번째는 각각 두 개의 요소, 빈 문자열과 내가 원하는 결과를 갖는 목록을 제공하고 둘 다 데이터 프레임 열에 채 웁니다.
목록의 각 요소에서 두 번째 하위 요소를 어떻게 선택할 수 있습니까? (또는 더 나은 방법이 있습니까?)
각 목록 항목의 두 번째 요소를 선택하려면 :
R> sapply(df$suf, "[[", 2)
[1] "00" "01" "02" "00" "01" "02" "21" "01" "03"
정규식을 사용하는 대체 방법 :
df$pre <- sub("^([A-Z]+)[0-9]+", "\\1", df$lab)
df$suf <- sub("^[A-Z]+([0-9]+)", "\\1", df$lab)
purrr :: map 사용하면
df$suf %>% map_chr(c(2))
첫째 : 당신이 사용하는 경우 str(df)
당신이 볼 수 그 df$pre
입니다 list
. 나는 당신이 원한다고 생각합니다 vector
(그러나 내가 틀릴 수도 있습니다).
문제로 돌아 가기-이 경우 다음을 사용합니다 gsub
.
df$pre <- gsub("[0-9]", "", df$lab)
df$suf <- gsub("[A-Z]", "", df$lab)
이렇게하면 두 열이 모두 벡터가되지만 레이블이 키에서 가져온 것이 아니면 실패합니다 (예 :) 'AB01B'
.
반응형
'Programing' 카테고리의 다른 글
count (*) "column"에 별칭을 사용하고 having 절에서 참조 할 수없는 이유는 무엇입니까? (0) | 2020.12.24 |
---|---|
Protobuf-net을 사용하면서 갑자기 알 수없는 와이어 유형에 대한 예외가 발생했습니다. (0) | 2020.12.24 |
Retry-after HTTP 응답 헤더-영향을 미칩니 까? (0) | 2020.12.24 |
phpMyAdmin에서 UTF-8 문자를 표시하는 방법은 무엇입니까? (0) | 2020.12.24 |
Android에서 강제로 링크를 열어 Chrome에서 열 수있는 방법이 있습니까? (0) | 2020.12.15 |