前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >将任意随机变点位置及其后的数都赋值为NA

将任意随机变点位置及其后的数都赋值为NA

作者头像
拴小林
发布2020-12-29 15:29:38
7920
发布2020-12-29 15:29:38
举报
文章被收录于专栏:数据驱动实践数据驱动实践

来源:R语言交流群-花儿少年

问题:在矩阵中,随机找到每一行的任意位置作为变点位置,然后把每一行变点位置及其后面的数都赋值为NA

思路:在矩阵中选择一个数据,可以通过值,也可以通过位置(索引)。因此,我将此问题转换为一个位置查找(随机数)的问题。

处理:在矩阵中取位置(行和列),根据位置取数,然后根据位置将目标数据替换为NA

代码语言:javascript
复制
# 生产一个100*5的矩阵
mx <-matrix(1:600,nrow = 100, ncol= 6)

set.seed(1234)
#随机生成100个1~6的数列
# 对应每行(100行)行中随机选择一个变点位置(共100个变点)
randx <-  ceiling(runif(100, min = 0, max = 1)*6) 

#创建一个空数列,用于存储单值列
mx1 <- matrix(NA,nrow=nrow(mx),ncol = 1) 
for (i in 1:nrow(mx)) {
# 对mx每一行和改行的随机列(数)做引用,并赋值给mx1的第i行
  mx1[i] <- mx[i,randx[i]]  
}

mx2 <- mx  #创建一个mx2矩阵,并根据mx1每个值在原mx的每行出现的位置定位赋值na
for (i in 1:nrow(mx)) {
  mx2[i,randx[i]:ncol(mx)] <- NA
}


head(mx) #原始矩阵
head(randx) #找到每一行的任意位置作为变点位置
head(mx1) #存储从mx找到的每一行的任意位置作为变点值
head(mx2) #把每一行变点位置及其后面的数都赋值为NA

效果如下:

代码语言:javascript
复制
> head(mx) #原始矩阵
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1  101  201  301  401  501
[2,]    2  102  202  302  402  502
[3,]    3  103  203  303  403  503
[4,]    4  104  204  304  404  504
[5,]    5  105  205  305  405  505
[6,]    6  106  206  306  406  506
> head(randx) #找到每一行的任意位置作为变点位置
[1] 1 4 4 4 6 4
> head(mx1) #存储从mx找到的每一行的任意位置作为变点值
     [,1]
[1,]    1
[2,]  302
[3,]  303
[4,]  304
[5,]  505
[6,]  306
> head(mx2) #把每一行变点位置及其后面的数都赋值为NA
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]   NA   NA   NA   NA   NA   NA
[2,]    2  102  202   NA   NA   NA
[3,]    3  103  203   NA   NA   NA
[4,]    4  104  204   NA   NA   NA
[5,]    5  105  205  305  405   NA
[6,]    6  106  206   NA   NA   NA
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-12-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据驱动实践 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档