2016-06-05 4 views
6

기본 R 함수를 사용하고 첫 번째 컬럼 상수를 유지하면서 data.frame을 data.frames리스트로 변환하고 싶습니다. 예를 들어, DF를 첫 번째 열을 포함하는 세 개의 data.frames 목록으로 분할하고 싶습니다. 즉, 각 목록 요소를 개별적으로 입력하지 않고 LONG이라는 목록을 작성하려고합니다. 고맙습니다.R은 data.frame을 컬럼별로리스트로 변환합니다.

DF <- data.frame(OBS=1:10,HEIGHT=rnorm(10),WEIGHT=rnorm(10),TEMP=rnorm(10)) 
DF 

LONG <- list(HEIGHT = DF[c("OBS", "HEIGHT")], 
      WEIGHT = DF[c("OBS", "WEIGHT")], 
      TEMP = DF[c("OBS", "TEMP" )]) 

LONG 

SHORT <- as.list(DF) 
SHORT 

SPLIT <- split(DF, col(DF)) 

답변

6

우리가 할 수있는 첫 번째, cbindnames에서 'DF'의 일부와 제 열을 제외한 'DF'의 names 통해 루프.

setNames(lapply(names(DF)[-1], function(x) cbind(DF[1], DF[x])), names(DF)[-1]) 

또는 또 다른 옵션이 될 것

Map(cbind, split.default(DF[-1], names(DF)[-1]), OBS=DF[1]) 
내 LONG 예 않습니다 또는 목록의 이름을 포함 할 수있는 방법이 있는지 궁금하지만 아주 멋진
+0

as.list를 사용하는 방법이있는 경우 또는 분할 기능. – user1491868

+1

@ user1491868 우리는'setNames'를 사용할 수 있습니다. 방금 업데이 트 – akrun

+1

@ DavidArenburg 그것은 작동합니다. 그것을 상기시켜 줘서 고마워. – akrun