2013-08-13 1 views
0

열 값 중 하나에 따라 문자 행렬을 분할하고 싶습니다. 예를 들어 3 열과 "n"행이 있고 열 2를 참조로 사용하고 싶다면 스크립트는 두 번째 열을보고 동일한 값을 포함하는 모든 행을 데이터 프레임으로 그룹화해야합니다.새로운 열 프레임의 가변 수로 열 값에 따라 문자 행렬의 자동 분할

그래서 "2"열에서 "n"행까지 "A", "B", "C", "D"및 "E"값을가집니다. 이 경우 두 번째 열 값으로 조정 된 모든 데이터 행을 포함하는 5 개의 새 데이터 프레임을 가져오고 싶습니다. 따라서 행렬의 두 번째 열에 "A"가 포함 된 모든 행은 하나의 데이터 프레임으로 이동합니다.

내 데이터가 훨씬 큽니다. 참조로 사용하려는 열 (위의 예에서 2 번 열)에 약 400 개의 다른 문자 값이 포함되어있어이 프로세스가 자동으로 처리되어야하므로 자동으로 처리해야합니다. "열 2"의 서로 다른 값의 수에 따라 얼마나 많은 새로운 데이터 프레임을 만들어야하는지 탐지합니다. 여기

structure(c("Hi", "Med", "Hi", "Low", "A", "D", "A", "C", "8", 
"3", "9", "9", "1", "1", "1", "2"), .Dim = c(4L, 4L), .Dimnames = list(
    NULL, c("b", "x", "y", "z"))) 

내가 참고로 (다시) 2 열 ("X")를 사용하는 경우 3 새 dataframes이 필요합니다 :

여기에 내가 필요한 짧은 예이다. 행 1과 3을 포함하는 하나의 데이터 프레임, 행 2를 포함하는 또 다른 데이터 프레임 및 행 4를 포함하는 마지막 데이터 프레임 3 개의 다른 값이 "A", "D"및 "C"이므로.

새 데이터 프레임은 그룹화 할 값으로 자동 지정되어야합니다. 따라서 첫 번째 데이터 프레임은 "A", 두 번째 "D"등으로 명명되어야합니다. 이 모든 프로세스를 더 큰 데이터로 자동화 할 수 있습니까?

나는 이것이 이미 대답되었지만 미안해하기를 바란다. 그러나 나는 나를 위해 일한 해결책을 찾지 못했다.

답변

2

소리가 나는대로 split 기능을 찾고 있습니다.

x <- structure(c("Hi", "Med", "Hi", "Low", 
       "A", "D", "A", "C", 
       "8", "3", "9", "9", 
       "1", "1", "1", "2"), 
       .Dim = c(4L, 4L), 
       .Dimnames = list(NULL, c("b", "x", "y", "z"))) 
split(data.frame(x), x[, 2]) 
# $A 
# b x y z 
# 1 Hi A 8 1 
# 3 Hi A 9 1 
# 
# $C 
#  b x y z 
# 4 Low C 9 2 
# 
# $D 
#  b x y z 
# 2 Med D 3 1 

결과 data.frame의 단일 list의 모든하지만, 당신이 실제로 당신의 작업 공간에서 개별 data.frame들로 분할하려는 경우 당신은 assign과 함께 일을 할 수있다.

+0

감사합니다. 데이터를 완벽하게 분할합니다. 이제 목록에서 자동으로 "n"개의 데이터 프레임을 만들어야합니다. 당신이 언급 한대로 할당 함수를 살펴 보았습니다.하지만 데이터 프레임의 수는 데이터 변경에 따라 변경 될 것이므로 havent는 데이터 프레임의 자동 생성을 할 수있었습니다. 이것에 대한 더 이상의 도움은 매우 감사 할 것입니다. – RabidHealer

+0

@RabidHealer,'split'의 결과를 "y"라는 이름의 객체로 저장한다고 가정하면'list2env (y, envir = .GlobalEnv)'를 사용하십시오. – A5C1D2H2I1M1N2O1R2T1

+0

신난다, 매력 같이 작동한다. 고마워요! – RabidHealer