2011-03-02 1 views
13

벡터가 있습니다 : c("A","1","2","3","B","4","5","D","6","7","8","9","10") 이 벡터를 목록으로 변환하고 싶습니다 : list(A=c(1,2,3),B=c(4,5),...) 벡터의 문자는 벡터 목록의 이름입니다. 벡터는 문자 사이의 숫자 블록에 있습니다.벡터를리스트로 변환

답변

22

한 가지 방법이 있습니다. 멋진 것은 없지만 일을 끝내게됩니다.

x <- c("A","1","2","3","B","4","5","D","6","7","8","9","10") 
y <- cumsum(grepl("[[:alpha:]]", x)) 
z <- list() 
for(i in unique(y)) z[[x[y==i][1]]] <- as.numeric(x[y==i][-1]) 
z 
# $A 
# [1] 1 2 3 
# 
# $B 
# [1] 4 5 
# 
# $D 
# [1] 6 7 8 9 10 

# UPDATE: Trying to be a bit more "fancy" 
a <- grepl("[[:alpha:]]", x) 
b <- factor(cumsum(a), labels=x[a]) 
c <- lapply(split(x,b), function(x) as.numeric(x[-1])) 
+1

팬시에 대한 임계 값이 내 것보다 높고 멋진 작업이어야합니다! – Chase

+0

+1 동의, 매우 좋은 –

+0

나는이 +100을 줄 수 있었으면 좋겠다. 이것은 논리적 인 벡터에서'cumsum'을 매우 똑똑하게 사용하는 것입니다. 저는 그것들에 대한 많은 어플리케이션을 제 코드에서 볼 수 있습니다. – Sharpie