首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R中逐行对非零元素进行编号

在R中逐行对非零元素进行编号
EN

Stack Overflow用户
提问于 2019-04-13 05:13:07
回答 2查看 61关注 0票数 1

我希望逐行对matrix中的非零元素进行编号。这是一个小的数据集和所需的结果。我更喜欢在基础R中的解决方案。

代码语言:javascript
复制
my.data <- matrix(c(10,  0,  0,  0,  0,
                     0,  3,  9,  0,  1,
                     2, 12,  0,  0,  0,
                     5,  5,  5,  0,  5,
                     0,  0,  0,  0,  0), nrow = 5, byrow = TRUE)

desired.result <- matrix(c( 1,  0,  0,  0,  0,
                            0,  1,  2,  0,  3,
                            1,  2,  0,  0,  0,
                            1,  2,  3,  0,  4,
                            0,  0,  0,  0,  0), nrow = 5, byrow = TRUE)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-13 05:22:28

另一对选项:

代码语言:javascript
复制
# create new matrix with multiplication
t(apply(my.data != 0, 1, cumsum)) * (my.data != 0)


# alternative:
# replace elements in original matrix
my.data[my.data != 0] = t(apply(my.data != 0, 1, cumsum))[my.data != 0]
my.data
#      [,1] [,2] [,3] [,4] [,5]
# [1,]    1    0    0    0    0
# [2,]    0    1    2    0    3
# [3,]    1    2    0    0    0
# [4,]    1    2    3    0    4
# [5,]    0    0    0    0    0
票数 7
EN

Stack Overflow用户

发布于 2019-04-13 05:18:48

下面是一个相对简单的base R方法:

代码语言:javascript
复制
t(apply(my.data, 1, function(x) {
    x[x != 0] <- seq_len(sum(x != 0))
    x
    }))

     [,1] [,2] [,3] [,4] [,5]
[1,]    1    0    0    0    0
[2,]    0    1    2    0    3
[3,]    1    2    0    0    0
[4,]    1    2    3    0    4
[5,]    0    0    0    0    0
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55659496

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档