【问题标题】:how to manipulate columns that have certain string如何操作具有特定字符串的列
【发布时间】:2020-08-04 03:42:44
【问题描述】:

我正在尝试使用 R 对多个数据集执行 for 循环。 这是它的样子。

  USERTYPE BSEC Ttime    mean1    mean2  mean3 route
1        1   10  2096 2279.467 2400.989 2849.6     1
2        1   19  2205 2279.467 2400.989 2849.6     1
3        1   11  2559 2279.467 2400.989 2849.6     1
4        1    8  2138 2279.467 2400.989 2849.6     1
5        7   21  2196 2279.467 2400.989 2849.6     1
6        1   13  1954 2279.467 2400.989 2849.6     1

我想要执行的是计算 mean1-Ttime 、 mean2-Ttime、 mean3-Ttime 并将它们分别替换为 mean1、mean2、mean3。 问题是当我对多个数据集执行 for 循环时,具有“均值”的列数不同。例如 有些数据集有mean1,mean2,mean3,mean4.....mean10。

什么是用于对具有不同数量“平均值”的列执行减法处理的代码。我为此考虑了 grep 函数,但无法解决。我会很感激一些帮助。

【问题讨论】:

    标签: r


    【解决方案1】:

    dplyr 中,您可以使用mutate_at 将函数应用于多个列。

    library(dplyr)
    df %>% mutate_at(vars(starts_with('mean')), ~. - Ttime)
    
    #  USERTYPE BSEC Ttime    mean1    mean2 mean3 route
    #1        1   10  2096  183.467  304.989 753.6     1
    #2        1   19  2205   74.467  195.989 644.6     1
    #3        1   11  2559 -279.533 -158.011 290.6     1
    #4        1    8  2138  141.467  262.989 711.6     1
    #5        7   21  2196   83.467  204.989 653.6     1
    #6        1   13  1954  325.467  446.989 895.6     1
    

    在基础 R 中,我们可以使用 grep 选择其中包含 'mean' 的列并减去 Ttime

    cols <- grep('mean', names(df))
    df[cols] - df$Ttime
    

    【讨论】:

      【解决方案2】:

      Base R 单线:

      df[,grepl("mean", names(df)] <-  df[,grepl("mean", names(df)] - df$Time
      

      【讨论】:

        【解决方案3】:

        dplyr,我们也可以这样做

        library(dplyr)
        df %>%
            mutate(across(starts_with('mean'), ~ . - Ttime))
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-05-04
          • 1970-01-01
          • 2018-11-27
          • 2010-09-15
          • 2017-03-25
          • 2021-03-23
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多