разделить столбцы по имени - PullRequest
1 голос
/ 20 марта 2020

У меня есть список имен с идентификатором («транш»). Я пробую 6 разных стратегий, обозначенных номером в названии столбца. Я хочу разделить столбцы "pl_sum" на соответствующие столбцы "clr". Я хочу получить результаты в виде столбцов сложения в одном и том же фрейме данных.

Я предполагаю, что это какая-то функция применения или, возможно, функция dplyr summarise_at. Но я не могу заставить его работать. Я избавлю вас от моих беспорядочных попыток выполнить задачу.

  nodename    tranche pl1_sum pl2_sum pl3_sum pl4_sum pl5_sum pl6_sum  clr1  clr2  clr3  clr4  clr5  clr6
  <chr>         <int>   <dbl>   <dbl>   <dbl>   <dbl>   <dbl>   <dbl> <int> <int> <int> <int> <int> <int>
1 AECC_CSWS         1   -255.   -255.   -255.     0         0       0   160   160   160     0     0     0
2 AECC_CSWS         2   -310.   -310.   -310.     0         0       0   161   161   161     0     0     0
3 AECC_CSWS         3   -218.   -218.   -218.     0         0       0   172   172   172     0     0     0
4 AECC_CSWS         4   -375.   -375.   -375.    81.7       0       0   227   227   227    18     0     0
5 AECC_ELKINS       1   -266.   -266.   -266.     0         0       0   160   160   160     0     0     0
6 AECC_ELKINS       2   -336.   -336.   -356.     0         0       0   161   161   157     0     0     0

1 Ответ

1 голос
/ 20 марта 2020

В base R мы можем использовать grep, чтобы найти столбец 'pl' и соответствующий ему 'cl' (при условии, что оба набора столбцов находятся в одном и том же порядке в наборе данных)

plcols <- grep("^pl\\d+_sum", names(df1), value = TRUE)
clcols <- grep("^clr\\d+$", names(df1), value = TRUE)
df1[paste0(plcols, "_by_", clcols)] <- df1[plcols]/df1[clcols]

При tidyverse существует несколько вариантов, одним из которых будет map2

library(dplyr)
library(purrr)
library(stringr)
map2_dfc(df1[plcols], df1[clcols], `/`) %>%
     rename_all(~ str_c(., 'new')) %>%
     bind_cols(df1, .)
...