【问题标题】:Convert matrix to row/data pairs将矩阵转换为行/数据对
【发布时间】:2015-10-14 19:36:48
【问题描述】:

我有一个交易数据表,每个单元格中都有项目编号。对于每个非缺失条目,我想输出一个(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

我希望每一行都以这种方式转换。

【问题讨论】:

标签: r


【解决方案1】:

您可以生成一个包含所有对(包括缺少项目编号的对)的表格,然后使用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) 是一个包含矩阵数据的向量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-23
    • 2017-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多