В R, как я могу проанализировать переменные, содержащие "# min" и преобразовать эти переменные в секунды? - PullRequest
1 голос
/ 12 ноября 2019

Я работаю в Tidyverse, и у меня есть четыре столбца, который выглядит следующим образом:

+-------------------+--------------------+--------------------+-------------+
| application <chr> |      start<chr>    |       end<chr>     |  usage<chr> |
+-------------------+--------------------+--------------------+-------------+
| reddit is fun     | 01-Mar-19 17:37:26 | 01-Mar-19 17:37:36 | 10 sec      |
| Maps              | 01-Mar-19 17:37:38 | 01-Mar-19 17:41:1  | 3 min       |
| Clock             | 01-Mar-19 17:41:10 | 01-Mar-19 17:41:21 | 11 sec      |
+-------------------+--------------------+--------------------+-------------+

Я собираюсь преобразовать любое значение, указанное в минутах в столбце использования, в секунды. Я могу сделать это в Excel, хотя я бы предпочел не использовать Excel в уравнении!

Я думаю, что мне может понадобиться использовать функцию извлечения, используя регулярное выражение для значений "# min", разделите «#» и «min», выполните преобразование в секунды, а затем объедините два столбца, оба теперь в секундах, с вставкой.

Я на правильном пути? Спасибо!

1 Ответ

1 голос
/ 12 ноября 2019

Привет и добро пожаловать в SO!

Чтобы предоставить альтернативу (возможно, не лучшую) ответу, предложенному Ронаком, вы можете сделать:

sapply(usage, function(x){
  if(length(x[grep("min",x)]) != 0) 
    {
    x[grep("min",x)] = as.character(paste0(as.numeric(gsub(" min","",x))*60," sec"))
  }
  else{x = x}
})

На вашем примере этовыдаст следующий вывод:

usage = c("10 sec","3 min","11 sec")

> sapply(usage, function(x){
+   if(length(x[grep("min",x)]) != 0) 
+     { x[grep("min",x)] = as.character(paste0(as.numeric(gsub(" min","",x))*60," sec"))}
+   else{x = x}
+ })
   10 sec     3 min    11 sec 
 "10 sec" "180 sec"  "11 sec" 

Затем вы можете использовать этот вывод для замены столбца usage.

...