美文网首页
迂回生成示例数据框(编程小技巧)

迂回生成示例数据框(编程小技巧)

作者: 小洁忘了怎么分身 | 来源:发表于2019-07-23 22:49 被阅读0次

    问题

    我在讲R语言基础课程时,放了一道练习题,让学员生成如下数据框:



    我给出的答案是:

    df <- data.frame(gene=paste0("gene",1:15),
                     s1=rnorm(15),
                     s2=rnorm(15),
                     s3=rnorm(15))
    

    tips:rnom是一个生成随机数的函数,括号里的15代表生成随机数的数量是15个。

    遇到了一位学员提了个问题:后三列的列名有规律,内容也都是随机数,如果有需求生成10列、100列,有没有其他方法快捷生成?

    方法一:利用矩阵

    我想到的第一种方法时用矩阵生成,然后转换为数据框。
    因为矩阵就是在向量的基础上增加了行和列的属性,如下:

    df2=matrix(rnorm(45),ncol = 3)
    df2=data.frame(df2)
    df2=cbind(gene=paste0("gene",1:15),df2)
    df2
    

    思路非常简单:先生成45个随机数,然后将他们排列为三列,同样的道理,要生存10列那就是10×15个随机数,排列为10列。

    方法二:利用for循环和列表

    这个思路就相对难一点:
    1.先赋值一个空数据,只定义他的数据结构是列表。
    2.然后用for循环进行批量赋值,将这些值储存在列表里,成为列表的元素。元素名是s1,s2。。。s10。
    3.用as.data.frame将列表转换为数据框。

    test=list()
    #定义行数。n等于几,就会生成几列。
    n=10
    for(i in 1:n){
      test[[i]] <- rnorm(15)
    }
    df3 = as.data.frame(test)
    colnames(df3) <- paste0("s",1:n)
    df3=cbind(gene=paste0("gene",1:15),df3)
    df3
    

    将这些代码复制到Rstudio即可直接运行。

    补充:现在查看左边的变量窗口

    i的值是10L,代表的是整数10,这里的L是为了强调,区分数值型数据的两个分支,即整型和双精度型,之所以是是10,是因为for循环多次运行了大括号内的代码,最后一轮i的值是10。

    微信公众号生信星球同步更新我的文章,欢迎大家扫码关注!


    我们有为生信初学者准备的学习小组,点击查看◀️
    想要参加我的线上线下课程,也可加好友咨询🔼
    如果需要提问,请先看生信星球答疑公告

    相关文章

      网友评论

          本文标题:迂回生成示例数据框(编程小技巧)

          本文链接:https://www.haomeiwen.com/subject/hiszlctx.html