как управлять столбцами с определенной строкой - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь выполнить для l oop для нескольких наборов данных с R. вот как это выглядит.

  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 соответственно. Проблема в том, что когда я выполняю для l oop для нескольких наборов данных, номера столбцов со «средними» различны. например, в некоторых наборах данных есть среднее1, среднее2, среднее3, среднее4 ..... среднее10.

Каким будет код для выполнения процесса вычитания со столбцами, которые имеют другое количество "средних" . Я думал о функции grep для этого, но не смог ее решить. Буду признателен за помощь.

Ответы [ 3 ]

3 голосов
/ 08 мая 2020

В 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
1 голос
/ 08 мая 2020

В dplyr мы также можем сделать

library(dplyr)
df %>%
    mutate(across(starts_with('mean'), ~ . - Ttime))
1 голос
/ 08 мая 2020

Однострочное основание R:

df[,grepl("mean", names(df)] <-  df[,grepl("mean", names(df)] - df$Time
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...