2014-05-22 2 views
0

는 I 3 열이 데이터 프레임을 가지고 세 번째 열은 내에 Y-ID 객체의 영역 (2 COL)의 비율을 나타낸다변수를 행렬의 좌표로 사용하여 데이터 프레임을 행렬로 변환하는 방법은 무엇입니까?

x y percentage 
1 1 1   50 
2 1 2   25 
3 1 3   25 
4 2 1   15 
5 2 2   35 
6 2 3   25 
7 2 4   25 
8 3 1   55 
9 3 2   45 

: 같이

df<-data.frame(x=c(1,1,1,2,2,2,2,3,3), y=c(1,2,3,1,2,3,4,1,2), percentage=c(50,25,25,15,35,25,25,55,45)) 

이 보인다 x-ID 개체 (1 col).

좌표/첨자와 행렬의 요소 인 "백분율"을 정의하는 x 및 y와 관련된 행렬 (또는 smthg 관련)을 얻고 싶습니다.

1 2 3 4 
1 50 25 25 0 
2 15 35 25 25 
3 55 45 0 0 

이것을 달성하는 쉬운 방법이 있나요 :

기본적으로, 나는 그런 매트릭스를 좀하고 싶습니다? xy의 요소가 연속 자연수 인 경우

답변

3
xtabs(percentage~x+y, data=df) 
1

, 시도 :

df<-data.frame(x=c(1,1,1,2,2,2,2,3,3), y=c(1,2,3,1,2,3,4,1,2), percentage=c(50,25,25,15,35,25,25,55,45)) 
out <- matrix(0, nrow=length(unique(df$x)), ncol=length(unique(df$y))) 
out[cbind(df$x, df$y)] <- df$percentage 
out 

##  [,1] [,2] [,3] [,4] 
## [1,] 50 25 25 0 
## [2,] 15 35 25 25 
## [3,] 55 45 0 0 
1

이 솔루션은 data.table를 사용하여 :

# Load package 
library(data.table) 

# Set up data 
dt <- data.table(x=c(1,1,1,2,2,2,2,3,3), y=c(1,2,3,1,2,3,4,1,2), percentage=c(50,25,25,15,35,25,25,55,45)) 

# Transform data 
m <- as.matrix(dcast.data.table(data=dt, x ~ y, value.var="percentage", fill=0)[,-1, with=FALSE]) 

# > m 
#  1 2 3 4 
# [1,] 50 25 25 0 
# [2,] 15 35 25 25 
# [3,] 55 45 0 0 
관련 문제