【问题标题】:creating one new data frame applying one function over existing one创建一个新数据框,在现有数据框上应用一种功能
【发布时间】:2011-12-01 08:52:41
【问题描述】:

我正在尝试使用现有的数据框和成对的数据创建一个新的数据框

TargetID    A1           A2           B1      B2     
cg00000108 0.94483140 0.959417300 0.94427000 0.956393400 
cg00000292 0.83331720 0.836168900 0.75568530 0.869691000 
cg00001594 0.00000000 0.009319287 0.00318779 0.001852309 
cg00003298 0.01775547 0.034981820 0.03380106 0.116663900 
cg00003345 0.55442110 0.542106600 0.54762020 0.624028200 
cg00004055 0.10287610 0.107147500 0.09293073 0.106663000

想法是得到一个数据帧与对之间的减法结果,所以最终得到三个最终列

TargetID A1-A2 B1-B2

我尝试向我们申请,但我没有足够的 R 编程技能来了解如何告诉函数从哪里开始减法

提前致谢

【问题讨论】:

    标签: r dataframe apply subtraction


    【解决方案1】:

    这是一种使用 R 的索引功能和矢量化操作的方法。生成与要减去的列相对应的两个索引序列。这是一个例子:

    #5 row by 10 column matrix
    m <- matrix(rnorm(50), ncol = 10)
    
    #sequence one for columns 1,3,5,7,9
    s1 <- seq(1,ncol(m),2)
    #sequence two for columns 2,4,6,8,10
    s2 <- seq(2,ncol(m),2)
    
    #Create new matrix
    m2 <- m[, s1] - m[, s2]
    
    #apply some column names
    colnames(m2) <- paste("x", s1, s2, sep = "_")
    

    刚刚意识到我之前在这里问过几乎相同的问题:Operate on multiple columns at once

    【讨论】:

      【解决方案2】:

      简单地说:

      with(d, data.frame(TargetID, A1-A2, B1-B2))
      

      d 是您的数据框。

      【讨论】:

      • 谢谢!!!想象一下我有 40 列或更多,那么我必须使用 for 循环或应用?
      • @user976991:您可以遍历列对并重复 cbind 将成对差异放入同一个数据帧中。
      • 如果您采用这种方法,请确保为性能目的预先分配结果对象的大小。
      猜你喜欢
      • 1970-01-01
      • 2021-09-08
      • 1970-01-01
      • 2021-10-30
      • 2022-01-23
      • 2018-12-30
      • 2016-10-14
      • 1970-01-01
      相关资源
      最近更新 更多