R语言 | 随机生成模拟数据

当你需要一组简单的示例数据用以模拟分析时,除了使用R种自带的数据集,也可以自己通过随机数产生。
下列文件展示了一组基于已有数据额外拓展生成两组额外sd的随机数据,以便模拟两组sd变化时对第三组数据的影响。过程是生成对应数指定均值的两组sd。随后通过公式计算第三组结果,以模拟三组数据在指定公式下的相互影响。

# 文件预览
> head(row_data)
  sample number trait_A trait_B trait_C
1     Dhi      1 62.40 80.72 143.12
2     Dhi      1 68.01 88.09 156.10
3     Dhi      2 59.30 62.24 121.54
4     Dhi      2 61.27 65.52 126.79
5     Dhi      3 47.01 64.12 111.13
6     Dhi      3 47.01 75.06 122.07
# 统计均值,分型
sum_tmp <- row_data%>%
  group_by(sample, number)%>%
  summarise(trait_A = sum(sum_A),
            trait_B= sum(sum_B),
            trait_C = sum(sum_C))%>%
  data.frame()%>%
  mutate(AR = trait_B/trait_A,
         CI = trait_A/(trait_A + trait_B)*100)%>%
  mutate(check = if_else(trait_A <= trait_B, "TRUE","FALSE"))%>%
  mutate(type = if_else(AR >= 1.00 & AR <= 1.70 ,"typeA",
                            if_else(AR > 1.70 & AR <= 3.00,"typeB",
                                    if_else(AR > 3.00 & AR <= 7.00,"typeC","typeD"))))%>%
  rownames_to_column(var = "label")
### 两个数据的sd
sd_1 <- rnorm(sum_tmp$sample%>%
                #length确定数据数量,mean和sd指定方差的比例和浮动情况
                length(),mean = 0.05,sd = 0.008)%>%
  data.frame()%>%
  dplyr::rename(tmp_AR = ".")%>%
                # label 用以多表关联
  rownames_to_column(var = "label")
sd_2 <- rnorm(sum_tmp$sample%>%
                length(),mean = 0.02,sd = 0.001)%>%
  data.frame()%>%
  dplyr::rename(tmp_CI = ".")%>%
  rownames_to_column(var = "label")
# 根据label合并
sum_data <- sum_tmp%>%
  left_join(sd_1,by = "label")%>%
  left_join(sd_2,by = "label")%>%
  mutate(AR_sd = AR*tmp_AR,
         CI_sd = CI*tmp_CI)%>%
  dplyr::select(sample,number,AR,AR_sd,CI,CI_sd,type)

将上述分步脚本合并,同时增加对小数点位数的统计等。

# 整合脚本
sum_tmp <- row_data%>%
  group_by(sample, number)%>%
  summarise(trait_A = sum(sum_A),
            trait_B = sum(sum_B),
            trait_C = sum(sum_C))%>%
  data.frame()%>%
  #直接在计算后控制小数点位置
  mutate(AR = round(trait_B/trait_A,2),
         CI = round(trait_A/(trait_A + trait_B)*100,2))%>%
  left_join(row_data%>%
              group_by(sample, number)%>%
              summarise(trait_C = sum(sum_C))%>%
              data.frame()%>%
              group_by(sample)%>%
              summarise(sum_C = sum(trait_C))%>%
              data.frame(),by = "sample")%>%
  mutate(R_sum_C = round(trait_C*100/sum_C,2))%>%
  mutate(check = if_else(trait_A <= trait_B, "TRUE","FALSE"))%>%
  mutate(chr_type = if_else(AR >= 1.00 & AR <= 1.70 ,"TypeA",
                            if_else(AR > 1.70 & AR <= 3.00,"TypeB",
                                    if_else(AR > 3.00 & AR <= 7.00,"TypeC","TypeD"))))%>%
  rownames_to_column(var = "label")%>%
  #通过length控制生成的数目
  left_join(round(rnorm(row_data$sample%>%
                          # 由于数目过小,先保留4位小数
                          length(),mean = 0.05,sd = 0.008),4)%>%
              #转换格式
              data.frame()%>%
              #修改名称,否则后面重复
              dplyr::rename(tmp_AR = ".")%>%
              rownames_to_column(var = "label"),by = "label")%>%
  left_join(round(rnorm(row_data$sample%>%
                          length(),mean = 0.02,sd = 0.001),4)%>%
              data.frame()%>%
              dplyr::rename(tmp_CI = ".")%>%
              rownames_to_column(var = "label"),by = "label")%>%
  left_join(round(rnorm(row_data$sample%>%
                          length(),mean = 0.04,sd = 0.002),4)%>%
              data.frame()%>%
              dplyr::rename(tmp_RL = ".")%>%
              rownames_to_column(var = "label"),by = "label")%>%
  #将生成的sd与原数据相乘,此时回到两位小数
  mutate(AR_sd = paste(AR," ± ",round(tmp_AR*AR,2)),
         CI_sd = paste(CI," ± ",round(tmp_CI*CI,2)),
         RL_sd = paste(R_sum_C," ± ",round(tmp_RL*R_sum_C,2)))%>%
  dplyr::select(sample,number,AR_sd,CI_sd,RL_sd,chr_type)%>%
  mutate(AR = if_else(chr_type == "T","--",AR_sd),
         CI = if_else(chr_type == "T","--",CI_sd),
         RL = if_else(chr_type == "T","--",RL_sd))%>%
  dplyr::select(sample,number,AR,CI,RL,chr_type)


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 224,896评论 6 522
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 96,283评论 3 402
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 172,085评论 0 367
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 61,010评论 1 300
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 70,015评论 6 400
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 53,492评论 1 314
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 41,858评论 3 428
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 40,829评论 0 279
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 47,374评论 1 324
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 39,409评论 3 346
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 41,527评论 1 355
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 37,131评论 5 351
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,858评论 3 339
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 33,296评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 34,434评论 1 276
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 50,087评论 3 381
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 46,597评论 2 366

推荐阅读更多精彩内容