2015-10-14 105 views
1

我有一個交易數據表,每個單元格中有物品編號。對於每個非缺少條目,我想輸出(ID, ITEM)對,其中ID是行號,ITEM是數據。例如,考慮下面的輸入表:將矩陣轉換爲行/數據對

(dat <- matrix(c(25, 39, 35, 39, 15, 26, 7, 227, 52, 120, 249, 422, 229, 104, 185, 390, 164, 124, 674, 449, 262, 143, 214, NA, 240, 205, 712, 704, 283, 320, 350, NA, 274, 401, 733, 825, 294, 569, 529, NA, 328, 581, 759, 857, 352, 620, 658, NA, 368, 704, 854, 895, 381, 798, 682, NA, 448, 814, 950, 937, 708, NA, 782, NA, 538, 825, NA, 954, 738, NA, 809, NA, 561, 834, NA, 964, 766, NA, 849, NA), nrow=8)) 
#  [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] 
# [1,] 25 52 164 240 274 328 368 448 538 561 
# [2,] 39 120 124 205 401 581 704 814 825 834 
# [3,] 35 249 674 712 733 759 854 950 NA NA 
# [4,] 39 422 449 704 825 857 895 937 954 964 
# [5,] 15 229 262 283 294 352 381 708 738 766 
# [6,] 26 104 143 320 569 620 798 NA NA NA 
# [7,] 7 185 214 350 529 658 682 782 809 849 
# [8,] 227 390 NA NA NA NA NA NA NA NA 

第八排將被轉換爲以下幾點:

data.frame(ID=c(8, 8), ITEM=c(227, 390)) 
# ID ITEM 
# 1 8 227 
# 2 8 390 

我想每一行以這種方式轉換。

+0

請勿發佈您的數據圖片。請閱讀http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example,以及http://stackoverflow.com/help/mcve – pcantalupo

回答

0

您可以生成所有對(包括缺少項目數的對),然後使用complete.cases來限制只是不丟失數據對的表:

out <- data.frame(ID=c(row(dat)), ITEM=c(dat)) 
out <- out[complete.cases(out),] 
head(out) 
# ID ITEM 
# 1 1 25 
# 2 2 39 
# 3 3 35 
# 4 4 39 
# 5 5 15 
# 6 6 26 

c(row(dat))返回指示的矢量輸入矩陣中的每一條數據的行號,而c(dat)是具有矩陣數據的向量。