반응형
"melt"와 반대로 데이터 프레임을 테이블로 재정렬
이 질문에 이미 답변이 있습니다.
다음과 같은 거대한 데이터 프레임이 있습니다.
SN = c(1:100, 1:100, 1:100, 1:100)
class = c(rep("A1", 100), rep("B2", 100), rep("C3", 100), rep("D4", 100)) # total 6000 levels
myvar = rnorm(400)
mydf = data.frame(SN, class, myvar)
각 레벨이 단일 열이고 myvar가 채워진 테이블에 "용해 해제"하고 싶습니다.
SN A1 B2 C3 D4 .............and so on for all 6000
어떻게 이걸 달성 할 수 있을까요? 간단한 질문이라는 건 알지만 알아낼 수 없었습니다.
> dcast(mydf, SN ~ class)
SN A1 B2 C3 D4
1 1 0.1461258 0.8325014 0.33562088 -0.07294576
2 2 0.5964182 0.4593710 -0.23652803 -1.52539568
3 3 2.0247742 -1.1235963 1.79875447 -1.87462227
4 4 0.8184004 1.3486721 0.76076486 -1.18311991
5 5 -0.6577212 0.3666741 -0.06057506 1.38825487
6 6 0.1590443 0.2043661 0.08161778 0.10421797
...
molten = melt( mydf , id.vars = c( "SN" , "class" ) , measure.vars = "myvar" )
casted = dcast( molten , SN~class )
기본 R에서는 다음과 같이 할 수 있습니다.
# get it sorted so that all you need to do is make a matrix out of it
mydf <- mydf[order(mydf$class, mydf$SN),]
# save the unique values of SN
SNu <- unique(mydf$SN)
# combine a matrix with SN
mydfw <- data.frame(SNu, matrix(mydf$myvar, nrow = length(SNu)))
# name your columns
colnames(mydfw) <- c('SN', levels(mydf$class))
또는 집계를 사용하는보다 간결한 표현을 위해
aggregate(myvar~SN, mydf, 'c')
# column names don't come out great
colnames(mydfw) <- c('SN', levels(mydf$class))
다른 접근 방식 split
:
mydfSplit <- split(mydf[,-2], mydf$class, drop=TRUE)
결과는 data.frame
구성 요소의 치수가 동일한 경우 쉽게로 변환 할 수있는 목록입니다 (이 예에서는 참).
mydf2 <- do.call(cbind, mydfSplit)
이 솔루션의 문제점은 최종 결과의 이름을 정리해야한다는 것입니다. 그러나보다 일반적인 데이터의 경우 SN
각 클래스에 대해 다른 경우 유용 할 수 있습니다 .
참조 URL : https://stackoverflow.com/questions/7827815/rearrange-dataframe-to-a-table-the-opposite-of-melt
반응형
'Program Tip' 카테고리의 다른 글
completablefuture 조인 대 get (0) | 2021.01.08 |
---|---|
API 끝점 의미 체계 (0) | 2021.01.08 |
popstate 이벤트가 HTML5 pushstate를 사용하여 뒤로 또는 앞으로 작업에서 오는 경우 어떻게 검색합니까? (0) | 2021.01.08 |
"중앙값의 중앙값"알고리즘 이해 (0) | 2021.01.08 |
git에서 ^ {}은 무엇을 의미합니까? (0) | 2021.01.08 |