【问题标题】:r multiple column subtractionr 多列减法
【发布时间】:2018-10-10 01:47:00
【问题描述】:

我的数据集的简化版本如下所示。

 Z_dog1_mu1  Z_dog2_mu1  Z_dog3_mu1  Z_cat1_mu1  Z_cat2_mu1   Z_cat3_mu1                                                
 0.0000      0.0000      0.0001      0.0005      0.0043       0.0045   
 0.0039     -0.0016     -0.0102     -0.0009      0.0421      -0.0139
-0.0380     -0.0733      0.0196      0.0261      0.0628       0.0463
-0.1036      0.0784     -0.0529      0.1053     -0.0511      -0.0138

我正在尝试像这样从 cat* 列中减去 dog* 列

 df$diff1 <- df$Z_dog1_mu1   -  df$Z_cat1_mu1
 df$diff2 <- df$Z_dog2_mu1   -  df$Z_cat2_mu1
 df$diff3 <- df$Z_dog3_mu1   -  df$Z_cat3_mu1  

如何在不手动减去如上所示的每一列的情况下更有效、更快地完成此操作。我有大约 100 个狗专栏 (Z_dog1_mu1...Z_dog100_mu1) 和 100 个猫专栏(Z_cat1_mu1...Z_cat100_mu1) /。任何建议都非常受欢迎。

【问题讨论】:

    标签: r dplyr subtraction


    【解决方案1】:

    我们分别对“狗”列和“猫”列进行子集化,然后进行减法

    nmdog <- grep("^Z_dog\\d+_mu", names(df))
    nmcat <- grep("^Z_cat\\d+_mu", names(df))
    df[paste0("diff", seq_along(nmdog))] <- df[nmdog] - df[nmcat]
    df
    #  Z_dog1_mu1 Z_dog2_mu1 Z_dog3_mu1 Z_cat1_mu1 Z_cat2_mu1 Z_cat3_mu1   diff1   diff2   diff3
    #1     0.0000     0.0000     0.0001     0.0005     0.0043     0.0045 -0.0005 -0.0043 -0.0044
    #2     0.0039    -0.0016    -0.0102    -0.0009     0.0421    -0.0139  0.0048 -0.0437  0.0037
    #3    -0.0380    -0.0733     0.0196     0.0261     0.0628     0.0463 -0.0641 -0.1361 -0.0267
    #4    -0.1036     0.0784    -0.0529     0.1053    -0.0511    -0.0138 -0.2089  0.1295 -0.0391
    

    注意:如示例所示,我们假设 'dog' 列序列对应于 'cat' 列序列,即 1:100

    数据

    df <- structure(list(Z_dog1_mu1 = c(0, 0.0039, -0.038, -0.1036), Z_dog2_mu1 = c(0, 
    -0.0016, -0.0733, 0.0784), Z_dog3_mu1 = c(1e-04, -0.0102, 0.0196, 
    -0.0529), Z_cat1_mu1 = c(5e-04, -9e-04, 0.0261, 0.1053), Z_cat2_mu1 = c(0.0043, 
    0.0421, 0.0628, -0.0511), Z_cat3_mu1 = c(0.0045, -0.0139, 0.0463, 
    -0.0138)), class = "data.frame", row.names = c(NA, -4L))
    

    【讨论】:

    • 出了点问题,它正在创建 200 个差异列,我无法打开需要很长时间的数据集,这是可以理解的,因为有大量列,但有 200 个差异列。 ..hmmm....可能是什么?
    • @KimJenkins。你能检查一下length(nmdog)length(nmcat)。如果两者相同,它应该可以正常工作
    • @KimJenkins。你有matrixdata.framedata.tabletbl_df 吗?
    • 我的错,我看到每个有 200 列,所以我们很好。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-30
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    相关资源
    最近更新 更多