Большой массив данных R - Как эффективно рассчитать столбец - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть кадр данных в R, который имеет числовые столбцы с именами X.new, X.old, X.delta; Y.new, Y.old, Y.detal и так далее.У меня более 100 столбцов с одинаковыми именами.Я хочу, чтобы дельта-столбцы были рассчитаны как новые минус старые для похожих имен.Например, X.delta должен быть рассчитан как X.new-X.old для каждой строки кадра данных.У меня около миллиона строк.В настоящее время у меня есть цикл, чтобы сделать это, но я знаю, что это не самый эффективный способ.Могу ли я сделать это, используя purr или любой другой пакет более эффективно?Любая помощь очень ценится.

1 Ответ

0 голосов
/ 30 ноября 2018

Это довольно общий способ выполнить то, что вы просили:

Сначала несколько фиктивных данных:

df <- data.frame(
  x.old = runif(1000),
  x.new = runif(1000),
  y.old = runif(1000),
  y.new = runif(1000)
)

Извлеките префиксы, помечая слово перед каждым .

pfx <- unique(gsub("(^..*)\\...*$", "\\1", names(df)))
pfx <- setNames(pfx, paste0(pfx, ".delta"))

Зацикливайтесь на каждом из префиксов и используйте их для индексации исходных столбцов data.frame и вычисления дельты.Такие циклы хороши в R.

deltas <- lapply(pfx, function(col) {
  old <- paste0(col, ".old")
  new <- paste0(col, ".new")
  df[[new]] - df[[old]]
})

Добавьте дельты к исходному набору данных:

res <- cbind(df, deltas)

> head(res)
       x.old      x.new      y.old     y.new    x.delta    y.delta
1 0.16582237 0.65722478 0.69491911 0.0321141  0.4914024 -0.6628050
2 0.31899968 0.86988894 0.63381341 0.3421112  0.5508893 -0.2917022
3 0.27247366 0.52519659 0.08306147 0.9015832  0.2527229  0.8185217
4 0.04901993 0.26079681 0.79428604 0.9277292  0.2117769  0.1334432
5 0.14126815 0.03030174 0.54559952 0.9441938 -0.1109664  0.3985943
6 0.21614648 0.03249826 0.90492169 0.1399136 -0.1836482 -0.7650081
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...