2012-11-29 4 views
0

데이터 프레임 :data.frame 소형 버전

200.01 117:10520 227137.56097561 
200.01 155:24 227137.56097561 
200.01 265:47 227137.56097561 
200.01 266:37 227137.56097561 
200.01 281:568 227137.56097561 
200.01 282:246 227137.56097561 
200.31 190:3374 227360 
200.56 110:1261 227545.365853659 
200.56 186:571 227545.365853659 
200.66 114:969 227619.512195122 
200.66 118:3886 227619.512195122 

데이터 제시 한 것이다. 질문 : 중복 열에서 한 행을 만들고 싶습니다. 예 :

코멘트에서 언급 한 바와 같이
200.01 117:10520 155:24 265:47 266:37 281:568 282:246 227137.56097561 
+0

모두 한 열에 나타나게 하시겠습니까? 또는 많은 컬럼에서? 대신에 각 요소가 길이가 될 수있는 목록을 원할 수도 있습니다. – Justin

+0

예제 에서처럼 필요합니다. 그래서 기본적으로 예제는 1 행이고 알고리즘 다음에 4 행과 같습니다 : 200.01 200.31 200.56 200.66. 그리고 나는 새로운 프레임을 만들 것이라고 – alap

+1

나는 저스틴의 질문이 "117 : 10520 ... 282 : 246이어야"라고 생각한다. 이것은 하나의 컬럼이 필요하다면'aggregate()'의 아주 간단한 어플리케이션처럼 보입니다. – A5C1D2H2I1M1N2O1R2T1

답변

2

이, 이것은 매우 간단 aggregate 질문 :

귀하의 데이터 : 통합에 대한

dat <- read.table(header = FALSE, stringsAsFactors=FALSE, text = " 
        200.01 117:10520 227137.56097561 
        200.01 155:24 227137.56097561 
        200.01 265:47 227137.56097561 
        200.01 266:37 227137.56097561 
        200.01 281:568 227137.56097561 
        200.01 282:246 227137.56097561 
        200.31 190:3374 227360 
        200.56 110:1261 227545.365853659 
        200.56 186:571 227545.365853659 
        200.66 114:969 227619.512195122 
        200.66 118:3886 227619.512195122") 

두 가지 옵션을 제공합니다. 첫 번째 경우 V2list입니다. 두 번째 옵션에서는 V2이 문자열입니다.

aggregate(V2 ~ V1 + V3, dat, c) 
#  V1  V3             V2 
# 1 200.01 227137.6 117:10520, 155:24, 265:47, 266:37, 281:568, 282:246 
# 2 200.31 227360.0           190:3374 
# 3 200.56 227545.4         110:1261, 186:571 
# 4 200.66 227619.5         114:969, 118:3886 
aggregate(V2 ~ V1 + V3, dat, paste, collapse=" ") 
#  V1  V3            V2 
# 1 200.01 227137.6 117:10520 155:24 265:47 266:37 281:568 282:246 
# 2 200.31 227360.0          190:3374 
# 3 200.56 227545.4        110:1261 186:571 
# 4 200.66 227619.5        114:969 118:3886 

은 참조 : 여러 열이 필요한 R Grouping functions: sapply vs. lapply vs. apply. vs. tapply vs. by vs. aggregate


경우에도 집계 할 다음 나중에 사용자 정의 기능을 사용하여 열을 분할 수 있습니다. 하나의 예제 함수는 @RicardoSaporta에 의해 공유 된 tableFlatten이며 가장 긴 목록 항목만큼의 열을 생성합니다. 그러나 @Justin이 의견에서 언급했듯이, 당신이하려는 일에 따라 목록이 더 유용 할 수 있습니다.

dat2 <- aggregate(V2 ~ V1 + V3, dat, c) 
(dat2 <- tableFlatten(dat2)) 
#  V1  V3  V2.01 V2.02 V2.03 V2.04 V2.05 V2.06 
# 1 200.01 227137.6 117:10520 155:24 265:47 266:37 281:568 282:246 
# 2 200.31 227360.0 190:3374          
# 3 200.56 227545.4 110:1261 186:571        
# 4 200.66 227619.5 114:969 118:3886