본문 바로가기

Programing

목록에있는 모든 요소의 두 번째 하위 요소를 가져 오는 방법

반응형

목록에있는 모든 요소의 두 번째 하위 요소를 가져 오는 방법


이전에이 문제를 겪어 본 적이 있지만 지금은 약간의 정신적 장애가 있습니다. 그래서 찾을 수 없으니 여기에 게시해서 다음에 찾을 수 있도록하겠습니다.

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)) 

purrr :: map에 대한 자세한 정보는


첫째 : 당신이 사용하는 경우 str(df)당신이 볼 수 그 df$pre입니다 list. 나는 당신이 원한다고 생각합니다 vector(그러나 내가 틀릴 수도 있습니다).
문제로 돌아 가기-이 경우 다음을 사용합니다 gsub.

df$pre <- gsub("[0-9]", "", df$lab)
df$suf <- gsub("[A-Z]", "", df$lab)

이렇게하면 두 열이 모두 벡터가되지만 레이블이 키에서 가져온 것이 아니면 실패합니다 (예 :) 'AB01B'.

참조 URL : https://stackoverflow.com/questions/2803460/how-to-get-the-second-sub-element-of-every-element-in-a-list

반응형